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
conciąg znaków jest znakiem, funkcja wywołuje funkcję,fileaby 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 yourObjectmusi 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 wfilei naciśnijTab .
file <- file(...)Linia wygląda podejrzanie mi. Czy nie jest to zarówno wywoływanie filejako funkcja, jak i przypisywanie filenowego 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 = FALSEi row.names = FALSEupewnij się, że wykluczono nazwy wierszy i kolumn w txt, a parametr quote = FALSEwyklucza 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 writeLineszachowuje zwroty i spacje w tekście, więc nie musisz uwzględniać \nna 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)