[R6]as.vector(x,“symbol”中存在错误:无法强制类型';环境';到类型为'的向量;符号';

[R6]as.vector(x,“symbol”中存在错误:无法强制类型';环境';到类型为'的向量;符号';,r,r6,R,R6,我在下面的代码中使用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 %

我在下面的代码中使用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$new("y")
在这里,您将该对象传递给参数
y\u name
,而不是参数
test

someAnalysis(tbl, test)
此处
as.name
需要一个可以强制为字符向量的对象:

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

但是在您的调用中,
y\u name
正在传递您的R6对象,该对象的类型为
environment
。这就是你的错误

你正在将R6对象传递给y_name参数。事实上,我知道。我原来的类和函数,显示了上面的错误,是复杂的,所以我提取了我的代码的重要部分。非常感谢。很抱歉我误解了我的代码和你的建议。我会小心投寄