参数化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
的挑战。你可以试试parse
和eval
,但总的来说这不是一个好主意。我会做这样的事情:
colname <- 'var2'
ddply(exampleDF, .(val1), function(sub_dat) sum(as.numeric(sub_dat[[colname]])))
你说你想要创建多个地块这样的,但是,我几乎一直能够建立这样一套使用磨制地块在ggplot2
(由同一作者创建作为plyr
)。见例如facet_wrap
和facet_grid
的文档。
感谢您的反馈。我会研究'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)))'' –