2015-02-23 58 views
3

我有一個值的數據框,我想用它來構建參數以便稍後發送到單獨的函數myFunction(名稱,大小,國籍)。例如。如何從參數值(R)的數據框動態創建形式參數

name <- c("Batman", "Superman", "HeMan") 
size <- c("Med", "Tall", "Enormous") 
nationality <- c("American", "Kryptonian", "Eternian") 
argVals <- data.frame(name, size, nationality) 

注意,每一列都有,我想作爲參數以後要傳遞給myFunction,其中預計每個這樣的形式參數的名稱使用一個適當的名稱。

我不知道我是否應該創建一個字符串,後來我通過給myFunction:

例如「name ='Superman',size ='Med',nationality ='American'」

或者,如果我能找到一種方法直接將名稱值傳遞給myFunction。

我試過使用各種咒語,但我想一定有一個更簡單的方法。謝謝。

注意:編輯後強調我缺乏清晰的關於用命名值調用函數的適當方式。

+0

你在找''do.call'嗎? – 2015-02-23 03:59:36

+0

您計劃將帶參數的字符串傳遞給R函數?因爲這不是R功能通常的工作方式。 – MrFlick 2015-02-23 04:00:47

+0

do.call是我收到的最接近的。如果我這樣做,do.call(粘貼,argVals),我得到一個正確的尺寸的答案,但它只是值(不是我需要的colName1 = value1,colName2 = value2格式)。你會建議創建我自己的變體粘貼併發送到do.call?謝謝。 – Rocinante 2015-02-23 04:02:46

回答

3

如果使用stringsAsFactors=FALSE防止argVals的元素,從入門變成因素:

argVals <- data.frame(name, size, nationality, 
         stringsAsFactors=FALSE) 

然後

as.list(argVals[1,]) 
## $name 
## [1] "Batman" 
## $size 
## [1] "Med" 
## $nationality 
## [1] "American" 

將生成相應的值命名列表,這可能是你想。 (或者,您可以使用lapply(as.list(argVals[1,]),as.character),但是可能更簡單/更清楚地阻止列進入因子。)如果您有函數foo(name,size,nationality),則do.call(foo,argVals[1,])將使用指定的參數運行該函數。

+0

謝謝@BenBolker - 你提到的do.call(foo,argVals [1,])方法非常棒。 – Rocinante 2015-02-23 04:13:58