参数化ddply R中

问题描述:

对于数据帧:参数化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个列重复同一行

这实际上是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)))'' –