在这个社区中,我真的得到了很多帮助。感谢您的帮助。
我正在制作function
。在function
参数中,有scale
,用于标准化值。
但是,当参数进入scale
时,function
无法识别该参数。
set.seed(1000)
a<-rnorm(10)
b<-rnorm(10)
test<-as.data.frame(cbind(a,b))
fun<-function(i,j,k){
x<-
test%>%dplyr::select(i,j)%>%
dplyr::mutate(i=scale(i),
j=scale(j))
return(x)
}
fun(i="a",j="b")
Error in colMeans(x, na.rm = TRUE) : 'x' must be numeric
我尝试了几种方法,但是都失败了。
起初,我是用dplyr
做的。错误发生后,我使用基本功能对其进行了更改。失败了。
我在对象周围加上了双括号{{}}
。失败了。
我放了as.formula
。它识别出该参数,但将其识别为独立的对象,而不是原始数据帧中的对象。
eval(parse(text = x,keep.source = FALSE)[[1L]])错误: 找不到对象'a'
答案 0 :(得分:2)
要传递带引号的列,我们可以在函数中使用mutate_at
。
library(dplyr)
fun <- function(test, i, j) {
test %>% mutate_at(vars(i, j), scale)
}
fun(test, "a", "b")
# a b
#1 -0.1673 -0.701
#2 -1.2571 -0.152
#3 0.5308 0.714
#4 1.3886 0.403
#5 -0.6559 -1.154
#6 -0.0809 0.776
#7 -0.2105 0.757
#8 1.5038 0.590
#9 0.4453 -2.065
#10 -1.4969 0.832
答案 1 :(得分:1)
如果我们以不带引号的形式传递,那么一个选择是
@Throws(NotFoundException::class, NullPointerException::class)