ランダムなデータとこれら2つの関数を取ります。関数を使って関数をcor.testに渡す
data = data.frame(x=c(1,2,3,4,5,5), y=c(1,2,3,4,5,5))
test_fun1 <- function(data, formula){ lm(formula = formula, data = data) }
test_fun2 <- function(data, formula){ cor.test(formula = formula, data = data) }
lm
期待どおりです。
test_fun1(data = data, formula= x~y)
でも、私はcor.test
と同じことをすることはできません。これは失敗します。
test_fun2(data = data, formula= ~x+y)
直接それだけで正常に動作します:
cor.test(formula = ~x+y, data = data)
を私はいくつかのスコープに問題がある可能性が読んだものから。 渡された数式を見つけることができません。エラーは "エラー:タイプ 'クロージャのオブジェクトはサブセット化できません"ですが、これはformula
が見つからないため、formula
という名前の関数を使用しようとしているためです。
渡された関数を見つけるにはどうすればよいですか?
cor.testがあるため動作するようになっている方法についていくつかの質問があり、その後、LMのように動作するようになっている場合cor.testは本当にLMが見えます注意してくださいと言うのではなく?数式環境内の変数が見つからない場合はその変数を検索し、その場合はその環境を破棄することはできません。一般的なケースではこれはうまくいくはずです。 –
ここで、 'test_fun4'が環境を破壊するバージョンである例を示します。 'fo < - 〜X + Y;環境(fo)< - new.env();環境(fo)$ Y < - 1:5; dd < - data.frame(X = 1:5); test_fun(data = dd、formula = fo) ' –
@ G.Grothendieck [OK]を、私はその点を理解しています。あなたの重要な説明をありがとうございました。 –