标尺无法识别R函数中的参数

时间:2019-12-14 12:27:36

标签: r function

在这个社区中,我真的得到了很多帮助。感谢您的帮助。

我正在制作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 

我尝试了几种方法,但是都失败了。

  1. 起初,我是用dplyr做的。错误发生后,我使用基本功能对其进行了更改。失败了。

  2. 我在对象周围加上了双括号{{}}。失败了。

  3. 我放了as.formula。它识别出该参数,但将其识别为独立的对象,而不是原始数据帧中的对象。

    eval(parse(text = x,keep.source = FALSE)[[1L]])错误:       找不到对象'a'

2 个答案:

答案 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)