Marca: ¿qué sucede si tengo varios subprocesos, todos los cuales me gustaría agregar líneas al mismo archivo? (El problema es que no puede tener más de una conexión a un archivo, si no me equivoco) Gracias.
Tal Galili
8
@Tal, esa es una excelente pregunta, debe publicarla como una pregunta nueva y separada para que reciba algo de atención. ¡Aquí hay programadores de R mucho más informados que yo!
Mark
8
Tenga en cuenta que esto requiere que el archivo "output.txt" ya exista. Si no es así, primero debe crearse, por ejemplo, usando 'file.create ("output.txt")'.
jhin
20
@jhin No estoy seguro si eso es cierto. Usando RStudio 0.98 y R versión 3.1.0, el archivo se crea automáticamente si no existe
JHowIX
44
La opción de writeLines()es aproximadamente diez veces más rápida que la combinación de sink()ycat()
sink () no funciona en Databricks, ten cuidado. Puede usar poner todo esto dentro de una función y llamar a esta función como capture.output (llamada de función, nombre de archivo)
Es bueno mostrar que la entrada no tiene que ser un vector de líneas
tim
1
@tim En realidad "Hallo\nWorld"es un vector de longitud uno del tipo de carácter. Solo inténtalotxt <- "Hallo\nWorld"; is.character(txt) && length(txt) == 1 && is.vector(txt)
zero323
Esto funciona para mí solo como writeLines(txt, con="outfile.txt").
Palec
no, debería funcionar sin nombrar argumentos siempre que proporcione un nombre de archivo válido como segundo argumento.
Las formas cortas de escribir líneas de texto en un archivo en R podrían realizarse con cat o writeLines como ya se muestra en muchas respuestas. Algunas de las posibilidades más cortas pueden ser:
Mientras writeLines agrega una nueva línea al final del archivo, no es el caso de cat . Este comportamiento podría 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
Pero la principal diferencia es que cat usa objetos R y escribe líneas de un vector de caracteres como argumento. Por lo tanto, escribir, p. Ej., Los números 1:10 se deben convertir en writeLines mientras se puede usar como está en cat:
La file <- file(...)línea me parece sospechosa. ¿No es tanto invocar filecomo una función y asignar fileun nuevo significado? ¿ file()Funciona incluso después de que se ejecuta este fragmento de código? No tengo acceso a una instalación R para
probarme
funcionó en mi configuración @Palec Puede cambiar el archivo a usted Archivo si tiene algún problema con las palabras reservadas
Luis Martins
1
La opción del sistema feo
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
Los parámetros col.names = FALSEy row.names = FALSEasegúrese de excluir los nombres de fila y columna en el txt, y el parámetro quote = FALSEexcluye esas comillas al principio y al final de cada línea en el txt. Para volver a leer los datos, puede usar text = readLines("output.txt").
En las versiones más nuevas de R, writeLinesconservará retornos y espacios en su texto, por lo que no necesita incluirlos \nal final de las líneas y puede escribir una gran porción de texto en un archivo. Esto funcionará con el ejemplo,
writeLines()
es aproximadamente diez veces más rápida que la combinación desink()
ycat()
En realidad, usted puede hacerlo con
sink()
:por lo tanto hacer:
fuente
Usaría el
cat()
comando como en este ejemplo:Luego puede ver los resultados con R con
fuente
¿Qué pasa con un simple
writeLines()
?o
fuente
"Hallo\nWorld"
es un vector de longitud uno del tipo de carácter. Solo inténtalotxt <- "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
Podrías hacer eso en una sola declaración
fuente
Yo sugiero:
Es más corto y más directo que la respuesta actual aceptada. No es necesario hacer:
Porque la documentación de
writeLines()
dice:fuente
Edición tidyverse con tubo y
write_lines()
de lectorfuente
Las formas cortas de escribir líneas de texto en un archivo en R podrían realizarse con cat o writeLines como ya se muestra en muchas respuestas. Algunas de las posibilidades más cortas pueden ser:
En caso de que no le guste el "\ n", también puede usar el siguiente estilo:
Mientras writeLines agrega una nueva línea al final del archivo, no es el caso de cat . Este comportamiento podría ser ajustado por:
Pero la principal diferencia es que cat usa objetos R y escribe líneas de un vector de caracteres como argumento. Por lo tanto, escribir, p. Ej., Los números 1:10 se deben convertir en writeLines mientras se puede usar como está en cat:
fuente
Para completar las posibilidades, puede usar
writeLines()
consink()
, si lo desea:Para mí, siempre parece más intuitivo de usar
print()
, pero si lo haces, la salida no será lo que deseas:fuente
Basado en la mejor respuesta :
Tenga en cuenta que
yourObject
debe estar en un formato de cadena; useas.character()
para convertir si lo necesita.Pero esto es escribir demasiado para cada intento de salvar. Creemos un fragmento en RStudio.
En Opciones globales >> Código >> Fragmento, escriba esto:
Luego, durante la codificación, escriba
wfile
y presioneTab .fuente
file <- file(...)
línea me parece sospechosa. ¿No es tanto invocarfile
como una función y asignarfile
un nuevo significado? ¿file()
Funciona incluso después de que se ejecuta este fragmento de código? No tengo acceso a una instalación R paraLa opción del sistema feo
fuente
¿Qué tal un simple
write.table()
?Los parámetros
col.names = FALSE
yrow.names = FALSE
asegúrese de excluir los nombres de fila y columna en el txt, y el parámetroquote = FALSE
excluye esas comillas al principio y al final de cada línea en el txt. Para volver a leer los datos, puede usartext = readLines("output.txt")
.fuente
En las versiones más nuevas de R,
writeLines
conservará retornos y espacios en su texto, por lo que no necesita incluirlos\n
al final de las líneas y puede escribir una gran porción de texto en un archivo. Esto funcionará con el ejemplo,Pero también podría usar esta configuración para incluir simplemente texto con estructura (saltos de línea o sangrías)
fuente