0

我在以下代码中使用了我的 R6 对象和函数

Test = R6Class(
  "test",

  public = list(
    y_name = NA,

    initialize = function(y_name){
      self$y_name = y_name
    }

  )
)

someAnalysis = function(tbl, y_name = "y_name", y = "a", test = Test$new("y")){
   tbl = tbl %>%
    filter(!!as.name(y_name) == y)

   print(test$y_name)
   print(tbl$y_name)
}

在某些情况下,它是成功完成的。

someAnalysis(tbl)

[1] "y"
[1] "a"

但是,错误发生在以下代码中

test = Test$new("y")
someAnalysis(tbl, test)
Error in as.vector(x, "symbol") : 
  cannot coerce type 'environment' to vector of type 'symbol'

为什么在函数之外定义Test对象时会出错?

请告诉我如何避免在使用 Test 类和 someAnalysis 方法时出错

4

1 回答 1

0

在这里,您正在制作一个新对象:

test = Test$new("y")

在这里,您将该对象传递给参数y_name,而不是参数test

someAnalysis(tbl, test)

这里as.name期待一个可以强制转换为字符向量的对象:

tbl = tbl %>%
 filter(!!as.name(y_name) == y)

但是在您的通话y_name中,您的 R6 对象被传递,该对象是environment. 因此你的错误。

于 2019-12-27T13:47:45.067 回答