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 に答える