我有一个名为dat的data.frame。
colnames(dat)
[1] "variable" "weight"
当我运行aggregate(weight ~ variable, dat, sum)
时,函数运行时没有错误,并返回我期望的值。
但是,当我在自定义函数中嵌入aggregate()
时,如下所示:
bins <- function(df, var, wt, n) {
tmp <- aggregate(wt ~ var, df, sum)
####################
other code not shown
####################
return(tmp)
}
然后运行out <- bins(df=dat, var=variable, wt=weight, n=5)
,我收到以下错误消息:
Error in eval(expr, envir, enclos) : object 'weight' not found
我也尝试使用with()
但没有成功。
答案 0 :(得分:1)
可能不是您正在寻找的确切内容,但我发现尽可能使用字符串更容易:
dat <- data.frame(
variable = sample(letters[1:5], 100, replace = TRUE),
variable2 = sample(letters[1:5], 100, replace = TRUE),
weight = rnorm(100)
)
bins <- function(df, var, wt, n) {
tmp <- aggregate(
as.formula(
paste(
wt,
paste(var, collapse = '+'),
sep = '~')),
df, sum)
return(tmp)
}
bins(df = dat, var = 'variable', wt = 'weight', n = 5)
bins(df = dat, var = c('variable', 'variable2'), wt = 'weight', n = 5)
结果:
variable weight
1 a 3.962502
2 b -0.137942
3 c -2.435460
4 d 1.557121
5 e -0.471481
variable variable2 weight
1 a a 0.15849141
2 b a 2.31792997
3 c a -2.67871600
4 d a 1.29191822
5 e a 0.93714161
6 a b 0.58574200
7 b b 1.78097554
8 c b 0.41522095
9 d b 0.32981119
10 e b -0.95515100
11 a c 1.66244525
12 b c -1.92009677
13 c c -2.53845106
14 d c -1.03501447
15 e c -0.53367121
16 a d 0.27701130
17 b d -0.54682389
18 c d 3.28828483
19 d d 1.58885843
20 e d 0.02646149
21 a e 1.27881159
22 b e -1.76992683
23 c e -0.92179907
24 d e -0.61845273
25 e e 0.05373811
答案 1 :(得分:-2)
您可以用df[,column]
替换简单列名称,并将列名称作为字符串传递:
bins <- function(df, var, wt, n) {
tmp <- aggregate(df[,wt] ~ df[,var], df, sum)
####################
other code not shown
####################
return(tmp)
}
使用cars
数据集的示例:
bins <- function(df, var, wt, n) {
tmp <- aggregate(df[,wt] ~ df[,var], df, sum)
return(tmp)
}
bins(cars, 'speed', 'dist')
This post也可能对您有帮助。