2012-04-12 98 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會話設置此選項。

相關問題