Nel linguaggio di scripting R, come posso scrivere righe di testo, ad esempio le seguenti due righe
Hello
World
in un file chiamato "output.txt"?
Nel linguaggio di scripting R, come posso scrivere righe di testo, ad esempio le seguenti due righe
Hello
World
in un file chiamato "output.txt"?
Risposte:
fileConn<-file("output.txt")
writeLines(c("Hello","World"), fileConn)
close(fileConn)
writeLines()è circa dieci volte più veloce della combinazione di sink()ecat()
In realtà puoi farlo con sink():
sink("outfile.txt")
cat("hello")
cat("\n")
cat("world")
sink()
quindi fai:
file.show("outfile.txt")
# hello
# world
Vorrei usare il cat()comando come in questo esempio:
> cat("Hello",file="outfile.txt",sep="\n")
> cat("World",file="outfile.txt",append=TRUE)
È quindi possibile visualizzare i risultati con R con
> file.show("outfile.txt")
hello
world
Che dire di un semplice writeLines()?
txt <- "Hallo\nWorld"
writeLines(txt, "outfile.txt")
o
txt <- c("Hallo", "World")
writeLines(txt, "outfile.txt")
"Hallo\nWorld"è un vettore di lunghezza di un tipo di carattere. Basta provaretxt <- "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
Potresti farlo in una sola affermazione
cat("hello","world",file="output.txt",sep="\n",append=TRUE)
Suggerisco:
writeLines(c("Hello","World"), "output.txt")
È più breve e più diretto della risposta attualmente accettata. Non è necessario fare:
fileConn<-file("output.txt")
# writeLines command using fileConn connection
close(fileConn)
Perché la documentazione per writeLines()dice:
Se
conè una stringa di caratteri, la funzione chiamafileper ottenere una connessione al file che viene aperta per la durata della chiamata di funzione.
# default settings for writeLines(): sep = "\n", useBytes = FALSE
# so: sep = "" would join all together e.g.
edizione ordinata con pipe e write_lines()da readr
library(tidyverse)
c('Hello', 'World') %>% write_lines( "output.txt")
Brevi modi per scrivere righe di testo in un file in R potrebbero essere realizzati con cat o writeLines come già mostrato in molte risposte. Alcune delle possibilità più brevi potrebbero essere:
cat("Hello\nWorld", file="output.txt")
writeLines("Hello\nWorld", "output.txt")
Nel caso in cui non ti piaccia la "\ n" puoi anche usare il seguente stile:
cat("Hello
World", file="output.txt")
writeLines("Hello
World", "output.txt")
Mentre writeLines aggiunge una nuova riga alla fine del file, ciò che non è il caso di Cat . Questo comportamento potrebbe essere regolato da:
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
Ma la differenza principale è che cat usa oggetti R e writeLines un vettore di caratteri come argomento. Quindi scrivere per esempio i numeri 1:10 deve essere lanciato per writeLines mentre può essere usato com'è in cat:
cat(1:10)
writeLines(as.character(1:10))
Per arrotondare le possibilità, è possibile utilizzare writeLines()con sink(), se si desidera:
> sink("tempsink", type="output")
> writeLines("Hello\nWorld")
> sink()
> file.show("tempsink", delete.file=TRUE)
Hello
World
A me sembra sempre molto intuitivo da usare print(), ma se lo fai l'output non sarà quello che vuoi:
...
> print("Hello\nWorld")
...
[1] "Hello\nWorld"
Basato sulla migliore risposta :
file <- file("test.txt")
writeLines(yourObject, file)
close(file)
Si noti che yourObjectdeve essere in un formato stringa; utilizzare as.character()per convertire se necessario.
Ma questo è troppo scrivere per ogni tentativo di salvataggio. Creiamo uno snippet in RStudio.
In Opzioni globali >> Codice >> Snippet, digitare questo:
snippet wfile
file <- file(${1:filename})
writeLines(${2:yourObject}, file)
close(file)
Quindi, durante la codifica, digitare wfilee premereTab .
file <- file(...)linea mi sembra sospetta. Non è sia invocare filecome una funzione che assegnare fileun nuovo significato? Fa file()il lavoro anche dopo questo pezzo di codice viene eseguito? Non ho accesso a un'installazione R per mettermi alla prova in questo momento ...
Che ne dici di un semplice write.table()?
text = c("Hello", "World")
write.table(text, file = "output.txt", col.names = F, row.names = F, quote = F)
I parametri col.names = FALSEe row.names = FALSEassicurarsi di escludere i nomi di riga e colonna nel txt e il parametro quote = FALSEesclude quelle virgolette all'inizio e alla fine di ogni riga nel txt. Per rileggere i dati, è possibile utilizzare text = readLines("output.txt").
Nelle versioni più recenti di R, writeLinesmanterrà i ritorni e gli spazi nel testo, quindi non è necessario includere \nalla fine delle righe e puoi scrivere un grosso pezzo di testo in un file. Questo funzionerà con l'esempio,
txt <- "Hello
World"
fileConn<-file("output.txt")
writeLines(txt, fileConn)
close(fileConn)
Ma potresti anche usare questa configurazione per includere semplicemente testo con struttura (interruzioni di riga o rientri)
txt <- "Hello
world
I can
indent text!"
fileConn<-file("output.txt")
writeLines(txt, fileConn)
close(fileConn)