2012-04-12 8 views
22

Me gustaría pasar el argumento (stringsAsFactors=FALSE) al rbind en do.call. Pero el siguiente no funciona:Cómo pasar un argumento adicional al argumento de función de do.call en R

data <- do.call(rbind, 
      strsplit(readLines("/home/jianfezhang/adoption.txt"), split="\t#\t"), 
      args=list(stringsAsFactors=FALSE)) 
+1

rbind solo tiene argumento deparse.level (no stringsAsFactors). –

+0

¿Qué tal un vistazo a tus datos? - No hay información sensible, por favor, pero un ejemplo reproducible mínimo (por ejemplo, 'dput (readLines ("/home/jianfezhang/adoption.txt ", n = 5))') – BenBarnes

Respuesta

18
do.call(rbind.data.frame, c(list(iris), list(iris), stringsAsFactors=FALSE)) 

habría sido mi respuesta, si no fuera por el hecho de que rbind no sabe qué hacer con stringsAsFactors (pero cbind.data.frame haría).

La salida de strsplit es presumiblemente una lista de vectores, en cuyo caso rbind crea una matriz. Puede especificar stringsAsFactors al convertir esta matriz a una hoja.de.datos,

data.frame(do.call(rbind, list(1:10, letters[1:10])), stringsAsFactors=FALSE) 
1

No estoy seguro de si su llamada a la función es válida, pero intente esto:

data <- do.call(rbind, 
    c(strsplit(readLines("/home/jianfezhang/adoption.txt"),split="\t#\t"), 
    list(stringsAsFactors=FALSE)) 

Usted necesita pasar todos los argumentos a do.call a través de una lista. Puede concat dos listas por c

> c(list(1, 2), list(3, 4)) 
[[1]] 
[1] 1 

[[2]] 
[1] 2 

[[3]] 
[1] 3 

[[4]] 
[1] 4 
5

Como alternativa, se puede establecer stringsAsFactors a FALSE globalmente usando options:

options(stringsAsFactors=FALSE) 

Al establecer esta en la parte superior de la secuencia de comandos hará cumplir esto a lo largo del guion. Incluso podría agregar al .Rprofile para establecer esta opción para todas las sesiones R que abra.

Cuestiones relacionadas