2012-10-17 98 views
0

對於數據幀:參數化ddply R中

exampleDF <- structure(list(val1 = structure(c(1L, 2L, 1L, 3L), .Label = c("MX", 
"SS", "VF"), class = "factor"), var2 = c(1, 2, 3, 4)), .Names = c("val1", 
"var2"), row.names = c(NA, -4L), class = "data.frame") 

而不是做:

ddply(exampleDF, .(val1), summarize, sum(as.numeric(var2))) 

是否可以參數化ddply調用(東西如下,雖然我試了一下,沒」噸工作):

colname <- 'var2' 
ddply(exampleDF, .(val1), summarize, sum(as.numeric(colname))) 

這導致..

val1 ..1 
1 MX NA 
2 SS NA 
3 VF NA 
Warning messages: 
1: In eval(expr, envir, enclos) : NAs introduced by coercion 
2: In eval(expr, envir, enclos) : NAs introduced by coercion 
3: In eval(expr, envir, enclos) : NAs introduced by coercion 

我們必須調用ddply獲取數據框中的一組列,併爲每個結果ddply生成圖。因此,我們希望參數化ddply呼叫,而不是爲n個列重複同一行

回答

2

這實際上是summarize而不是ddply的挑戰。你可以試試parseeval,但總的來說這不是一個好主意。我會做這樣的事情:

colname <- 'var2' 
ddply(exampleDF, .(val1), function(sub_dat) sum(as.numeric(sub_dat[[colname]]))) 

你說你想要創建多個地塊這樣的,但是,我幾乎一直能夠建立這樣一套使用磨製地塊在ggplot2(由同一作者創建作爲plyr)。見例如facet_wrapfacet_grid的文檔。

+0

感謝您的反饋。我會研究'facet_wrap'。對於您建議的代碼,看起來我無法執行任何其他功能,只要我已經納入您的更改。即我不能這樣做:'ddply(exampleDF,colname,function(sub_dat)sum(as.numeric(sub_dat [['var2']])),function(sub_dat)print(length(sub_dat)))'這是我的也想做。錯誤:'.fun(piece,...)中的錯誤:未使用的參數(s)(function(sub_dat)print(length(sub_dat)))'' –