这确实有效:
mean(data21m1$TAPSE,na.rm=TRUE)
但我怎样才能做到这一点
chara_fun<-function(x) {
mean(data21m1$x,na.rm=TRUE)
}
chara_fun(TAPSE)
我认为这只是一件小事,但我不明白。
答案 0 :(得分:3)
你可以做你想做的事情,但它涉及使用eval
和substitute
来获取父框架中的对象(我使用{{ 1}}和iris
,因为我们没有您的数据框):
mtcars
如果传入数据框,你可以(prbly&#34;应该&#34;)使它更通用,你可以设置一个默认值,以便更容易使用:
charaFun <- function(col) {
iris_col <- eval(substitute(col), iris, parent.frame())
mean(iris_col, na.rm=TRUE)
}
charaFun(Sepal.Width)
## [1] 3.057
但是,&#34;传入引号&#34;涉及更少的代码,并且可能更直接地使用(尽管charaFun <- function(col, data=iris) {
data_col <- eval(substitute(col), data, parent.frame())
mean(data_col, na.rm=TRUE)
}
charaFun(Sepal.Width)
## [1] 3.057
charaFun(cyl, mtcars)
## [1] 6.188
,ggplot
和plyr
之类的工作方式相反):
dplyr
答案 1 :(得分:1)
这不是在R中选择列/变量的方式。你需要通过&#34; TAPSE&#34;作为函数的字符串,然后将data21m1$x
更改为data21m1[, x]
(在函数体中)。使用字符串变量访问列时,不能使用美元符号。