Mark - what Se eu tiver vários threads, todos os quais gostaria de adicionar linhas ao mesmo arquivo? (O problema é que você não pode ter mais de uma conexão com um arquivo, se não me engano) Obrigado.
Tal Galili
8
@ Tal, que é uma excelente pergunta, você deve publicá-la como uma pergunta nova e separada, para que receba alguma atenção. Existem programadores R muito mais experientes por aqui do que eu!
Mark
8
Observe que isso requer que o arquivo "output.txt" já exista. Caso contrário, ele deve ser criado primeiro, por exemplo, usando 'file.create ("output.txt")'.
Jhin
20
@ jhin Não sei se isso é verdade. Usando rstudio 0,98 e R versão 3.1.0 o arquivo é criado automaticamente se ele não existe
JHowIX
4
A opção de writeLines()é cerca de dez vezes mais rápido, então a combinação de sink()ecat()
sink () não funciona no Databricks, tenha cuidado. Você pode usar colocar tudo isso dentro de uma função e chamar essa função como capture.output (chamada
bom para mostrar que a entrada não tem que ser um vetor de linhas
tim
11
@tim Na verdade, "Hallo\nWorld"é um vetor de comprimento único do tipo de caractere. Apenas tentetxt <- "Hallo\nWorld"; is.character(txt) && length(txt) == 1 && is.vector(txt)
zero323
Isso funciona para mim apenas como writeLines(txt, con="outfile.txt").
Palec 13/04/2015
Não, deve funcionar sem nomear argumentos, desde que você dê um nome de arquivo válido como segundo argumento.
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:
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:
A file <- file(...)linha parece suspeita para mim. Não é ao mesmo tempo invocar filecomo função e atribuir fileum 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 ...
Palec
ele trabalhou na minha configuração @Palec Você pode alterar arquivo para youFile se você tiver algum problema com palavras reservadas
Luis Martins
1
A opção feia do sistema
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
Os parâmetros col.names = FALSEe row.names = FALSEcertifique-se de excluir os nomes de linha e coluna no txt, e o parâmetro quote = FALSEexclui 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, writeLinespreservará retornos e espaços em seu texto; portanto, você não precisa incluir \nno final das linhas e pode gravar um grande pedaço de texto em um arquivo. Isso funcionará com o exemplo,
writeLines()
é cerca de dez vezes mais rápido, então a combinação desink()
ecat()
Na verdade, você pode fazer isso com
sink()
:portanto faça:
fonte
Eu usaria o
cat()
comando como neste exemplo:Você pode visualizar os resultados com R com
fonte
O que é um simples
writeLines()
?ou
fonte
"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
fonte
Eu sugiro:
É mais curto e mais direto do que a resposta atual aceita. Não é necessário fazer:
Porque a documentação para
writeLines()
diz:fonte
edição tidyverse com pipe e
write_lines()
de readrfonte
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:
Caso não goste do "\ n", você também pode usar o seguinte estilo:
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:
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:
fonte
Para completar as possibilidades, você pode usar
writeLines()
comsink()
, se desejar:Para mim, sempre parece mais intuitivo de usar
print()
, mas se você fizer isso, a saída não será o que você deseja:fonte
Com base na melhor resposta :
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:
Em seguida, durante a codificação, digite
wfile
e pressioneTab .fonte
file <- file(...)
linha parece suspeita para mim. Não é ao mesmo tempo invocarfile
como função e atribuirfile
um novo significado? Fazfile()
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 ...A opção feia do sistema
fonte
Que tal um simples
write.table()
?Os parâmetros
col.names = FALSE
erow.names = FALSE
certifique-se de excluir os nomes de linha e coluna no txt, e o parâmetroquote = FALSE
exclui essas aspas no início e no final de cada linha no txt. Para ler os dados novamente, você pode usartext = readLines("output.txt")
.fonte
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,Mas você também pode usar essa configuração para simplesmente incluir texto com estrutura (quebras de linha ou recuos)
fonte