1. ホーム
  2. r

[解決済み] データフレームに関数を入れる

2022-02-26 11:43:39

質問

Rで関数のベクトルをこのように代入することは可能なようです。

F <- c(function(){return(0)},function(){return(1)})

というように、(例えば)このように呼び出すことができるようにします。 F[[1]]() .

これなら私にもできそうな気がしてきました。

DF <- data.frame(F=c(function(){return(0)}))

を実行すると、次のようなエラーが発生します。

Error in as.data.frame.default(x[[i]], optional = TRUE) : cannot クラス ""関数""をdata.frameに強制適用する。

これは、データフレームに関数を入れることはできないということでしょうか?それとも、私のやり方が悪いのでしょうか?

どのように解決するのですか?

いいえ、データフレームに直接関数を入れることはできません。

ただし、あらかじめ関数を定義して、その名前をデータフレームに入れることは可能です。

foo <- function(bar) { return( 2 + bar ) }
foo2 <- function(bar) { return( 2 * bar ) }
df <- data.frame(c('foo', 'foo2'), stringsAsFactors = FALSE)

次に do.call() をクリックすると、その機能を利用することができます。

do.call(df[1, 1], list(4))
# 6

do.call(df[2, 1], list(4))
# 8

EDIT

上記の回避策は、名前付き関数がある限り有効です。

問題は、Rがオブジェクトのクラスを関数として認識し、適切なメソッドを検索することです。 as.data.frame() ( すなわち as.data.frame.function() ) が見つからない。 そのため as.data.frame.default() のラッパーに違いない。 stop() を呼び出すと、報告されたメッセージが表示されます。

要するに、そのクラスに対して実装していないだけのようです。