我正在尝试编写一个函数来进行一些经常重复的分析,其中一部分是计算每个组中的组数和成员数,所以很难解决!但是,我的代码有一个问题......
以下是一些示例数据
> dput(BGBottles)
structure(list(Machine = structure(c(1L, 1L, 1L, 2L, 2L, 2L,
3L, 3L, 3L, 4L, 4L, 4L), .Label = c("1", "2", "3", "4"), class = "factor"),
weight = c(14.23, 14.96, 14.85, 16.46, 16.74, 15.94, 14.98,
14.88, 14.87, 15.94, 16.07, 14.91)), .Names = c("Machine",
"weight"), row.names = c(NA, -12L), class = "data.frame")
这是我的代码
foo<-function(exp1, exp2, data) {
datadesc<-ddply(data, .(with(data, get(exp2))), nrow)
return(datadesc)
}
如果我运行此功能,我会收到错误
> foo(exp="Machine",exp1="weight",data=BGBottles)
Error in eval(substitute(expr), data, enclos = parent.frame()) :
invalid 'envir' argument
但是,如果我首先在全局environemtn中定义我的exp1,exp2和数据变量,它可以正常工作
> exp1<-"weight"
> exp2<-"Machine"
> data<-BGBottles
> foo(exp="Machine",exp1="weight",data=BGBottles)
with.data..get.exp2.. V1
1 1 3
2 2 3
3 3 3
4 4 3
那么,我假设ddply在函数的environemtn之外运行?有没有办法阻止这种情况,或者我做错了什么?
由于
保罗。
答案 0 :(得分:3)
您不需要get
:
foo<-function(exp1, exp2, data) {
datadesc<-ddply(data, exp2, nrow)
return(datadesc)
}
答案 1 :(得分:2)
这是此错误的一个示例:http://github.com/hadley/plyr/issues#issue/3。但正如马雷克指出的那样,无论如何你都不需要到这里来。