2

plotDataSet(..) と plotAllDataSets() の 2 つの .R ファイルがあります。plotDataSet(..) は、curve(..) (R グラフィック ライブラリ内) を呼び出し、plotAllDataSets() は plotDataSet(..) を呼び出します。plotDataSet(..) は関数をパラメーターとして受け取り、curve(..) に渡します。

次のような関数のリストから、curve(..) の関数引数を plotDataSet(..) に渡したいと思います。

 v <- c(function(x){x}, function(x){x*x}, function(x){x*x}, function(x){x*x*x}, 
     function(x){x*x}, function(x){x*x*x}, function(x){x*x*x})
for (i in 1:7) {
    plotSaveData(data, v[i], i)
}

次の出力が得られますError in eval(expr, envir, enclos) : could not find function "expectedOrderEquation"

興味深いことに、plotDataSet(..) を呼び出して のような関数を渡すと、正常function(x){x*x}に動作します。

for (i in 1:7) {
    plotSaveData(data, function(x) {x}, i)
}

しかし、これでは、関数のリストを循環しているときに plotSaveData(..) を呼び出すことはできません。

誰かがなぜこれがうまくいかないのか説明してもらえますか?

これで十分だと思いますが、必要に応じてより多くのコンテキストを提供できれば幸いです。また、私は R に少し慣れていないので、説明を修正していただけると助かります。

4

1 に答える 1

4

一重括弧の代わりに二重括弧を使用する

v[[i]]   instead of v[i]

これら2つの違いを見てください:

v[[i]] (3)  
v[i] (3) # error

一重括弧はリストを返し、その内容は
関数です。二重括弧は関数を返します。

于 2013-10-10T13:13:17.633 に答える