2012-06-02 6 views
16

Tal vez estoy imaginando esto, pero creo que hay una función R incorporada que te permite imprimir un vector R (y posiblemente otros objetos como matrices y marcos de datos) en el formato que usaría para ingresar ese objeto (devuelto como una cadena). Por ejemplo,Imprime un vector en R en el mismo formato utilizado para ingresarlo en R

> x <- c(1,2,3) 
> x 
[1] 1 2 3 
> magical.function(x) 
"c(1,2,3)" 

¿Esta función existe?

+0

Eche un vistazo a 'deparse (x)'. –

Respuesta

22

dput ¿quizás?

> test <- c(1,2,3) 
> dput(test) 
c(1, 2, 3) 

También puede dump a cabo varios objetos en una sola vez a un archivo que está escrito en el directorio de trabajo:

> test2 <- matrix(1:10,nrow=2) 
> test2 
    [,1] [,2] [,3] [,4] [,5] 
[1,] 1 3 5 7 9 
[2,] 2 4 6 8 10 
> dump(c("test","test2")) 

dumpdata.r contendrá entonces:

test <- 
c(1, 2, 3) 
test2 <- 
structure(1:10, .Dim = c(2L, 5L)) 
1

decidí agregue esta solución también porque encontré que dput() no funcionaba para lo que estaba tratando de hacer. Tengo una aplicación shiny que usa knitr para hacer informes basados ​​en la sesión del usuario, y uso knit_expand() antes de renderizar mi .Rmd para portar los parámetros del usuario desde la sesión brillante al .Rmd.

Sin entrar en demasiados detalles, tengo la necesidad de portar vectores "como están", porque se escribirán en líneas de código en el .Rmd que alguien ejecutará. En este caso, dput() no funcionó porque la salida solo se escupe en la consola, y el método dump() funciona pero no quería escribir nuevos archivos cada vez y eliminarlos.

Puede haber una manera mejor, pero escribí una función que devuelve un carácter objeto del vector "tal cual". Maneja vectores numéricos y de caracteres (arroja comillas alrededor de cada miembro del vector de caracteres). También maneja entradas individuales y simplemente las devuelve tal como son. No es bonito, y estoy seguro de que hay formas más eficientes de escribirlo, pero funciona perfectamente para mis necesidades. Pensé que agregaría esta solución a la refriega.

printVecAsis <- function(x) { 
    ifelse(length(x) == 1, x, 
     ifelse(is.character(x), paste0("c(", paste(sapply(x, function(a) paste0("\'",a,"\'")), collapse=", "), ")"), 
       paste0("c(", paste(x, collapse=", "), ")")))} 
Cuestiones relacionadas