1

定期的なチェックを行うためのヘルパー関数のファミリを含む R6 クラスがあります。これらの関数は公開リストに存在し、通常は単一の引数を取り、単一の引数に渡された値に対していくつかのチェックを実行し、何も問題がなければ値を返します。複数のチェックを頻繁に使用することはよくあります。

magrittrこれらのテストを簡単に連鎖させるために使用したいのですが、with関数を使用してコードをさらに短縮することは可能ですか

library(magrittr)
library(R6)

test = R6::R6Class("Test",inherit=NULL,
  public = list(
    initialize = function(){

    },
    fA = function(x){
      writeLines("Called FA")
      x
    },
    fB = function(x){
      writeLines("Called FB")
      x
    },

    #Enable Chaining by Returning Invisible copy of the R6 Instance
    fC = function(x){
      writeLines("Called FC")
      invisible(self)
    },
    fD = function(x){
      writeLines("Called FD")
      invisible(self)
    }
  )
)

#Works as expected
x = test$new()
y <- 1 %>% x$fA() %>% x$fB()
y

#This is also possible, but it loses the desired return value, and the value of the argument
#needs to be explicitly passed through to each function.
x$fC(1)$fD(1)

#I Would Like to do something like this:
y <- with(x,1 %>% fA() %>% fB()) #ERROR, could not find function "%>%"

#Trying to resolve the above, I also tried this, which doesn't work.
y <- with(x,1 magrittr::`%>%` fA() magrittr::`%>%` fB()) #ERROR

関数%>%内で演算子を認識させるにはどうすればよいですか?with

4

1 に答える 1