Mark - co jeśli mam kilka wątków, z których wszystkie chciałbym dodać linie do tego samego pliku? (Problem polega na tym, że nie możesz mieć więcej niż jednego połączenia z plikiem, jeśli się nie mylę) Dzięki.
Tal Galili
8
@Tal, to doskonałe pytanie, powinieneś opublikować je jako nowe, osobne pytanie, aby zyskało trochę uwagi. Jest tu o wiele więcej doświadczonych programistów R niż ja!
Mark
8
Zauważ, że wymaga to pliku „output.txt”, który już istnieje. Jeśli nie, najpierw należy go utworzyć, np. Za pomocą „file.create („ output.txt ”)”.
jhin
20
@jhin Nie jestem pewien, czy to prawda. Używając RStudio 0.98 i R w wersji 3.1.0 plik jest tworzony automatycznie, jeśli nie istnieje
JHowIX 10.09
4
Opcja writeLines()jest około dziesięć razy szybsza niż kombinacja sink()icat()
rafa.pereira
151
W rzeczywistości możesz to zrobić za pomocą sink():
sink () nie działa na Databricks bądź ostrożny. Możesz użyć umieścić wszystkie te funkcje w funkcji i wywołać tę funkcję jak capture.output (wywołanie funciton, nazwa pliku)
miło jest pokazać, że wejście nie musi być wektorem linii
tim
1
@ tim W rzeczywistości "Hallo\nWorld"jest to jeden wektor typu znaku. Po prostu spróbujtxt <- "Hallo\nWorld"; is.character(txt) && length(txt) == 1 && is.vector(txt)
zero323,
Działa to tylko dla mnie writeLines(txt, con="outfile.txt").
Palec
nie, powinien działać bez nazywania argumentów, o ile podasz poprawną nazwę pliku jako drugi argument.
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.
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:
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:
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ć ...
Palec
działało na mojej konfiguracji @Palec Możesz zmienić plik na youFile, jeśli masz jakiś problem z zastrzeżonymi słowami
Luis Martins
1
Brzydka opcja systemu
ptf <-function(txtToPrint,outFile){system(paste(paste(paste("echo '",cat(txtToPrint),sep ="",collapse =NULL),"'>",sep ="",collapse =NULL),outFile))}#Prints txtToPrint to outFile in cwd. #!/bin/bash echo txtToPrint > outFile
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,
writeLines()
jest około dziesięć razy szybsza niż kombinacjasink()
icat()
W rzeczywistości możesz to zrobić za pomocą
sink()
:dlatego wykonaj:
źródło
Użyłbym
cat()
polecenia jak w tym przykładzie:Następnie możesz wyświetlić wyniki za pomocą R za pomocą
źródło
Co jest prostego
writeLines()
?lub
źródło
"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
źródło
Sugeruję:
Jest krótszy i bardziej bezpośredni niż obecnie akceptowana odpowiedź. Nie trzeba wykonywać:
Ponieważ dokumentacja
writeLines()
mówi:źródło
edycja tidyverse z potokiem i
write_lines()
czytnikiemźródło
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:
Jeśli nie podoba Ci się „\ n”, możesz również użyć następującego stylu:
Podczas gdy writeLines dodaje nowy wiersz na końcu pliku, co nie jest prawdą cat . To zachowanie można skorygować poprzez:
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:
źródło
W uzupełnieniu możliwości, można skorzystać
writeLines()
zsink()
, jeśli chcesz:Dla mnie zawsze wydaje się najbardziej intuicyjny w użyciu
print()
, ale jeśli to zrobisz, wynik nie będzie taki, jak chcesz:źródło
W oparciu o najlepszą odpowiedź :
Zauważ, że
yourObject
musi być w formacie ciągu; użyjas.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:
Następnie podczas kodowania wpisz
wfile
i naciśnijTab .źródło
file <- file(...)
Linia wygląda podejrzanie mi. Czy nie jest to zarówno wywoływaniefile
jako funkcja, jak i przypisywaniefile
nowego znaczenia? Czyfile()
działa nawet po uruchomieniu tego fragmentu kodu? Nie mam dostępu do instalacji typu R, aby się teraz przetestować ...Brzydka opcja systemu
źródło
A co z prostym
write.table()
?Parametry
col.names = FALSE
irow.names = FALSE
upewnij się, że wykluczono nazwy wierszy i kolumn w txt, a parametrquote = 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")
.źródło
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,Ale możesz także użyć tego ustawienia, aby po prostu dołączyć tekst ze strukturą (podziały wierszy lub wcięcia)
źródło