2012-06-02 23 views
16

Forse lo sto immaginando, ma penso che ci sia una funzione R incorporata che ti permetta di stampare un vettore R (e possibilmente altri oggetti come matrici e frame di dati) nel formato che useresti per inserire quell'oggetto (restituito come stringa). Ad es.,Emettere un vettore in R nello stesso formato utilizzato per immetterlo in R

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

Esiste questa funzione?

+0

Dai un'occhiata a 'deparse (x)'. –

risposta

22

dput forse?

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

È anche possibile dump fuori più oggetti in una sola volta in un file che è scritto nella vostra directory di lavoro:

> 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 conterrà quindi:

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

ho deciso di aggiungi anche questa soluzione perché ho trovato che dput() non funzionava per quello che stavo cercando di fare. Ho un'applicazione shiny che utilizza knitr per creare report basati sulla sessione utente e io uso knit_expand() prima di mostrare il mio .Rmd per portare i parametri utente dalla sessione lucida al file .Rmd.

Senza entrare troppo nel dettaglio, ho bisogno di portare i vettori "così come sono", perché saranno scritti in righe di codice nel file .Rmd che qualcuno eseguirà. Per questo caso, dput() non ha funzionato perché l'output è solo sputo alla console e il metodo dump() funziona ma non ho voluto scrivere ogni volta nuovi file ed eliminarli.

Potrebbe esserci un modo migliore, ma ho scritto una funzione che restituisce un oggetto carattere del vettore "così com'è". Gestisce sia i vettori numerici che i caratteri (getta le virgolette attorno a ciascun membro del vettore dei caratteri). Gestisce anche i singoli input e li restituisce semplicemente così come sono. Non è carino, e sono sicuro che ci sono modi più efficienti per scriverlo, ma funziona perfettamente per i miei bisogni. Ho pensato di aggiungere questa soluzione alla mischia.

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=", "), ")")))} 
Problemi correlati