2012-04-12 81 views
22

我想在do.call中将参数(stringsAsFactors=FALSE)传递给rbind。但下面不工作:如何将额外参数传递给R中的do.call函数参数

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

rbind只有deparse.level(不是stringsAsFactors)参数。 – 2012-04-12 08:27:01

+0

如何看待您的数据? - 请不要有敏感信息,但是一个最小可重现的例子(例如'dput(readLines(“/ home/jianfezhang/adoption.txt”,n = 5))') – BenBarnes 2012-04-12 08:36:59

回答

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

Concat的两个列表将是我的答案,如果它不是一个事实,即rbind不知道该怎么做stringsAsFactors(但cbind.data.frame会)。

strsplit的输出大概是一个向量列表,在这种情况下rbind创建一个矩阵。您可以将这个矩阵转换为data.frame时或者指定stringsAsFactors

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

我不知道,如果你的函数调用是有效的,但试试这个:

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

,你需要通过一个列表传递所有参数do.call。 您可以通过c

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

[[2]] 
[1] 2 

[[3]] 
[1] 3 

[[4]] 
[1] 4 
5

,您可以设置stringsAsFactorsFALSE全球使用options

options(stringsAsFactors=FALSE) 

在脚本的顶部设置,这将强制执行这整个脚本。您甚至可以添加到.Rprofile为您打开的所有R会话设置此选项。