我需要对 data.frame 中的不同变量应用一系列操作。为了使我的代码更短且更易于阅读,我正在尝试对这些操作进行功能化。但是,我无法使用变量(在函数中)来引用 data.frame 中的变量。这是一个玩具示例:
set.seed(1)
dframe <- data.frame(ID=rep(1:4, each=3),
cond=rep(c("a", "b"), each=6),
x=rnorm(12))
dframe
ID cond x
1 1 a -0.6264538
2 1 a 0.1836433
3 1 a -0.8356286
4 2 a 1.5952808
5 2 a 0.3295078
6 2 a -0.8204684
7 3 b 0.4874291
8 3 b 0.7383247
9 3 b 0.5757814
10 4 b -0.3053884
11 4 b 1.5117812
12 4 b 0.3898432
get.means <- function(var, dframe){
dframe <- dframe[order(dframe$ID),]
mat <- aggregate(var~ID, data=dframe, FUN=mean)
mat
}
get.means(var=x, dframe=dframe)
Error in eval(expr, envir, enclos) : object 'x' not found
我可以通过使用来让它工作get.means(var=dframe$x, dframe=dframe)
,但这会导致其他问题。以下是我尝试过的其他一些无效的方法:
get.means2 <- function(var, dframe){
dframe <- dframe[order(dframe$ID),]
mat <- aggregate(get(var)~ID, data=dframe, FUN=mean)
mat
}
get.means2(var=x, dframe=dframe)
Error in get(var) : object 'x' not found
get.means3 <- function(var, dframe){
dframe <- dframe[order(dframe$ID),]
mat <- aggregate(eval(var)~ID, data=dframe, FUN=mean)
mat
}
get.means3(var=x, dframe=dframe)
Error in eval(var) : object 'x' not found
get.means4 <- function(var, dframe){
dframe <- dframe[order(dframe$ID),]
mat <- aggregate(dframe[,var]~ID, data=dframe, FUN=mean)
mat
}
get.means4(var=x, dframe=dframe)
Error in `[.data.frame`(dframe, , var) : object 'x' not found