参数化R中的ddply

时间:2012-10-17 05:08:10

标签: r plyr

对于数据框:

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列重复相同的行

1 个答案:

答案 0 :(得分:2)

这实际上是summarize的挑战,而不是ddply。您可以尝试使用parseeval执行某些操作,但总的来说这不是一个好主意。我会做类似的事情:

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

你说你想创建这样的多个图,但是,我几乎总能使用ggplot2中的构面创建这样一组图(由同一作者plyr创建)。参见例如facet_wrapfacet_grid的文档。