Na linguagem de script R, como escrevo linhas de texto, por exemplo, as duas linhas a seguir
Hello
World
para um arquivo chamado "output.txt"?
Na linguagem de script R, como escrevo linhas de texto, por exemplo, as duas linhas a seguir
Hello
World
para um arquivo chamado "output.txt"?
Respostas:
fileConn<-file("output.txt")
writeLines(c("Hello","World"), fileConn)
close(fileConn)
writeLines()
é cerca de dez vezes mais rápido, então a combinação de sink()
ecat()
Na verdade, você pode fazer isso com sink()
:
sink("outfile.txt")
cat("hello")
cat("\n")
cat("world")
sink()
portanto faça:
file.show("outfile.txt")
# hello
# world
Eu usaria o cat()
comando como neste exemplo:
> cat("Hello",file="outfile.txt",sep="\n")
> cat("World",file="outfile.txt",append=TRUE)
Você pode visualizar os resultados com R com
> file.show("outfile.txt")
hello
world
O que é um simples writeLines()
?
txt <- "Hallo\nWorld"
writeLines(txt, "outfile.txt")
ou
txt <- c("Hallo", "World")
writeLines(txt, "outfile.txt")
"Hallo\nWorld"
é um vetor de comprimento único do tipo de caractere. Apenas tentetxt <- "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
Você poderia fazer isso em uma única declaração
cat("hello","world",file="output.txt",sep="\n",append=TRUE)
Eu sugiro:
writeLines(c("Hello","World"), "output.txt")
É mais curto e mais direto do que a resposta atual aceita. Não é necessário fazer:
fileConn<-file("output.txt")
# writeLines command using fileConn connection
close(fileConn)
Porque a documentação para writeLines()
diz:
Se
con
for uma sequência de caracteres, a função chamafile
para obter uma conexão de arquivo que é aberta durante a duração da chamada da função.
# default settings for writeLines(): sep = "\n", useBytes = FALSE
# so: sep = "" would join all together e.g.
edição tidyverse com pipe e write_lines()
de readr
library(tidyverse)
c('Hello', 'World') %>% write_lines( "output.txt")
Maneiras curtas de escrever linhas de texto em um arquivo em R poderiam ser realizadas com cat ou writeLines, como já mostrado em muitas respostas. Algumas das possibilidades mais curtas podem ser:
cat("Hello\nWorld", file="output.txt")
writeLines("Hello\nWorld", "output.txt")
Caso não goste do "\ n", você também pode usar o seguinte estilo:
cat("Hello
World", file="output.txt")
writeLines("Hello
World", "output.txt")
Enquanto o writeLines adiciona uma nova linha no final do arquivo, o que não é o caso do gato . Esse comportamento pode ser ajustado por:
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
Mas a principal diferença é que o gato usa objetos R e escreve um vetor de caracteres como argumento. Então, escrevendo, por exemplo, os números 1:10 precisam ser convertidos para writeLines, enquanto podem ser usados como no gato:
cat(1:10)
writeLines(as.character(1:10))
Para completar as possibilidades, você pode usar writeLines()
com sink()
, se desejar:
> sink("tempsink", type="output")
> writeLines("Hello\nWorld")
> sink()
> file.show("tempsink", delete.file=TRUE)
Hello
World
Para mim, sempre parece mais intuitivo de usar print()
, mas se você fizer isso, a saída não será o que você deseja:
...
> print("Hello\nWorld")
...
[1] "Hello\nWorld"
Com base na melhor resposta :
file <- file("test.txt")
writeLines(yourObject, file)
close(file)
Observe que as yourObject
necessidades precisam estar em um formato de string; usaras.character()
para converter se você precisar.
Mas isso é muita digitação para cada tentativa de salvamento. Vamos criar um trecho no RStudio.
Em Opções Globais >> Código >> Snippet, digite este:
snippet wfile
file <- file(${1:filename})
writeLines(${2:yourObject}, file)
close(file)
Em seguida, durante a codificação, digite wfile
e pressioneTab .
file <- file(...)
linha parece suspeita para mim. Não é ao mesmo tempo invocar file
como função e atribuir file
um novo significado? Faz file()
o trabalho mesmo depois de este pedaço de código é executado? Não têm acesso a uma instalação R me testar agora ...
Que tal um simples write.table()
?
text = c("Hello", "World")
write.table(text, file = "output.txt", col.names = F, row.names = F, quote = F)
Os parâmetros col.names = FALSE
e row.names = FALSE
certifique-se de excluir os nomes de linha e coluna no txt, e o parâmetro quote = FALSE
exclui essas aspas no início e no final de cada linha no txt. Para ler os dados novamente, você pode usar text = readLines("output.txt")
.
Nas versões mais recentes do R, writeLines
preservará retornos e espaços em seu texto; portanto, você não precisa incluir \n
no final das linhas e pode gravar um grande pedaço de texto em um arquivo. Isso funcionará com o exemplo,
txt <- "Hello
World"
fileConn<-file("output.txt")
writeLines(txt, fileConn)
close(fileConn)
Mas você também pode usar essa configuração para simplesmente incluir texto com estrutura (quebras de linha ou recuos)
txt <- "Hello
world
I can
indent text!"
fileConn<-file("output.txt")
writeLines(txt, fileConn)
close(fileConn)