データ フレームのリストがあり、リスト内の各データ フレームに対する非線形の最適を計算し、最適なオブジェクトのリストを取得したいと考えています。lapply を使用しようとしていますが、パラメーターに問題があります。
# define a function for D
fncTtr <- function(n,d) (d/n)*((sqrt(1+2*(n/d))-1))
# define a function for best fit
bestFitD <- function(dat,fun) {
res <- nls(dat$ttr~fun(n,d),data=dat,start=list(d=25),trace=T)
return(res)
}
resL <- lapply(dData2,bestFitD,dat=dData2,fun=fncTtr)
このコードを実行すると、次のエラーが発生します。
FUN(X[[1L]], ...) のエラー: 未使用の引数 (X[[1]])
lapply が dData2 の各データフレームを通過し、bestFitD 関数を実行するようにします。lapply で関数のパラメーターをどのように定義すればよいですか。dData2 オブジェクトはリストです。bestFitD のパラメーターとして使用していますが、この関数は 1 つのデータフレームをパラメーターとして想定しています。このパラメータを定義するにはどうすればよいですか? 1 つのデータフレームで関数 bestFitD を単独で実行すると、正しく実行されます。データフレームであるコンポーネントを含む dData2 リストの例:
$`1`
n ttr d id
1 35 0.6951 27.739 1
2 36 0.6925 28.072 1
3 37 0.6905 28.507 1
4 38 0.6887 28.946 1
5 39 0.6790 28.003 1
6 40 0.6703 27.247 1
7 41 0.6566 25.735 1
8 42 0.6605 26.981 1
9 43 0.6567 27.016 1
10 44 0.6466 26.026 1
11 45 0.6531 27.667 1
12 46 0.6461 27.128 1
13 47 0.6336 25.751 1
14 48 0.6225 24.636 1
15 49 0.6214 24.992 1
16 50 0.6248 26.011 1
$`2`
n ttr d id
17 35 0.6951 27.739 2
18 36 0.6925 28.072 2
19 37 0.6905 28.507 2
20 42 0.6605 26.981 2
次のコードは問題ないようです。
res <- bestFitD(dData2[[1]],fncTtr)
しかし、次を実行すると:
res <- bestFitD(dData2[[2]],fncTtr)
次のエラーが表示されます。
Error in model.frame.default(formula = ~dat + ttr + n, data = dat) :
invalid type (list) for variable 'dat'
なんで?どちらもデータフレームです!しかし、どうやら 2 番目のコンポーネントには奇妙な点があるようです。