W języku skryptowym R, jak pisać wiersze tekstu, np. Dwa kolejne wiersze
Hello
World
do pliku o nazwie „output.txt”?
W języku skryptowym R, jak pisać wiersze tekstu, np. Dwa kolejne wiersze
Hello
World
do pliku o nazwie „output.txt”?
Odpowiedzi:
fileConn<-file("output.txt")
writeLines(c("Hello","World"), fileConn)
close(fileConn)
writeLines()
jest około dziesięć razy szybsza niż kombinacja sink()
icat()
W rzeczywistości możesz to zrobić za pomocą sink()
:
sink("outfile.txt")
cat("hello")
cat("\n")
cat("world")
sink()
dlatego wykonaj:
file.show("outfile.txt")
# hello
# world
Użyłbym cat()
polecenia jak w tym przykładzie:
> cat("Hello",file="outfile.txt",sep="\n")
> cat("World",file="outfile.txt",append=TRUE)
Następnie możesz wyświetlić wyniki za pomocą R za pomocą
> file.show("outfile.txt")
hello
world
Co jest prostego writeLines()
?
txt <- "Hallo\nWorld"
writeLines(txt, "outfile.txt")
lub
txt <- c("Hallo", "World")
writeLines(txt, "outfile.txt")
"Hallo\nWorld"
jest to jeden wektor typu znaku. Po prostu spróbujtxt <- "Hallo\nWorld"; is.character(txt) && length(txt) == 1 && is.vector(txt)
writeLines(txt, con="outfile.txt")
.
> coefficients<-summary(model) > writeLines(coefficients, "coefficients") Error in writeLines(coefficients, "coefficients") : invalid 'text' argument
Możesz to zrobić w jednym oświadczeniu
cat("hello","world",file="output.txt",sep="\n",append=TRUE)
Sugeruję:
writeLines(c("Hello","World"), "output.txt")
Jest krótszy i bardziej bezpośredni niż obecnie akceptowana odpowiedź. Nie trzeba wykonywać:
fileConn<-file("output.txt")
# writeLines command using fileConn connection
close(fileConn)
Ponieważ dokumentacja writeLines()
mówi:
Jeśli
con
ciąg znaków jest znakiem, funkcja wywołuje funkcję,file
aby uzyskać połączenie z plikiem, które jest otwarte na czas trwania wywołania funkcji.
# default settings for writeLines(): sep = "\n", useBytes = FALSE
# so: sep = "" would join all together e.g.
edycja tidyverse z potokiem i write_lines()
czytnikiem
library(tidyverse)
c('Hello', 'World') %>% write_lines( "output.txt")
Za pomocą można zrealizować krótkie sposoby zapisywania wierszy tekstu do pliku w języku R cat lub writeLines, jak pokazano już w wielu odpowiedziach. Oto niektóre z najkrótszych możliwości:
cat("Hello\nWorld", file="output.txt")
writeLines("Hello\nWorld", "output.txt")
Jeśli nie podoba Ci się „\ n”, możesz również użyć następującego stylu:
cat("Hello
World", file="output.txt")
writeLines("Hello
World", "output.txt")
Podczas gdy writeLines dodaje nowy wiersz na końcu pliku, co nie jest prawdą cat . To zachowanie można skorygować poprzez:
writeLines("Hello\nWorld", "output.txt", sep="") #No newline at end of file
cat("Hello\nWorld\n", file="output.txt") #Newline at end of file
cat("Hello\nWorld", file="output.txt", sep="\n") #Newline at end of file
Ale główną różnicą jest to, że kot zastosowania R obiektom i writeLines do postaci wektorowej jako argument. Tak więc zapisując np. Liczby 1:10, należy użyć rzutowania dla writeLines, podczas gdy można go używać tak, jak jest w cat:
cat(1:10)
writeLines(as.character(1:10))
W uzupełnieniu możliwości, można skorzystać writeLines()
z sink()
, jeśli chcesz:
> sink("tempsink", type="output")
> writeLines("Hello\nWorld")
> sink()
> file.show("tempsink", delete.file=TRUE)
Hello
World
Dla mnie zawsze wydaje się najbardziej intuicyjny w użyciu print()
, ale jeśli to zrobisz, wynik nie będzie taki, jak chcesz:
...
> print("Hello\nWorld")
...
[1] "Hello\nWorld"
W oparciu o najlepszą odpowiedź :
file <- file("test.txt")
writeLines(yourObject, file)
close(file)
Zauważ, że yourObject
musi być w formacie ciągu; użyj as.character()
do konwersji, jeśli potrzebujesz.
Ale to za dużo pisania na każdą próbę zapisu. Utwórzmy fragment w RStudio.
W Opcje globalne >> Kod >> Snippet, wpisz to:
snippet wfile
file <- file(${1:filename})
writeLines(${2:yourObject}, file)
close(file)
Następnie podczas kodowania wpisz wfile
i naciśnijTab .
file <- file(...)
Linia wygląda podejrzanie mi. Czy nie jest to zarówno wywoływanie file
jako funkcja, jak i przypisywanie file
nowego znaczenia? Czy file()
działa nawet po uruchomieniu tego fragmentu kodu? Nie mam dostępu do instalacji typu R, aby się teraz przetestować ...
A co z prostym write.table()
?
text = c("Hello", "World")
write.table(text, file = "output.txt", col.names = F, row.names = F, quote = F)
Parametry col.names = FALSE
i row.names = FALSE
upewnij się, że wykluczono nazwy wierszy i kolumn w txt, a parametr quote = FALSE
wyklucza znaki cudzysłowu na początku i na końcu każdej linii w txt. Aby ponownie odczytać dane, możesz użyć text = readLines("output.txt")
.
W nowszych wersjach R writeLines
zachowuje zwroty i spacje w tekście, więc nie musisz uwzględniać \n
na końcu wierszy i możesz napisać jeden duży fragment tekstu do pliku. Będzie to działać z przykładem,
txt <- "Hello
World"
fileConn<-file("output.txt")
writeLines(txt, fileConn)
close(fileConn)
Ale możesz także użyć tego ustawienia, aby po prostu dołączyć tekst ze strukturą (podziały wierszy lub wcięcia)
txt <- "Hello
world
I can
indent text!"
fileConn<-file("output.txt")
writeLines(txt, fileConn)
close(fileConn)