gpt4 book ai didi

r - 最适合非线性数据帧列表

转载 作者:行者123 更新时间:2023-12-02 05:12:30 25 4
gpt4 key购买 nike

我有一个数据框列表,我想计算列表中每个数据框的非线性最佳拟合,并获得一个包含最佳拟合对象的列表。我正在尝试使用 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)

当我执行这段代码时,出现以下错误:

Error in FUN(X[[1L]], ...) : unused argument(s) (X[[1]])

我希望 lapply 遍历 dData2 中的每个数据帧并执行 bestFitD 函数。我应该如何在 lapply.h 中定义函数的参数? dData2 对象是一个列表。我将它用作 bestFitD 的参数,但此函数需要一个数据帧作为参数。我如何定义这个参数?当我用一个数据帧单独执行函数 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'

为什么?两者都是数据框!但是第二个组件似乎有些奇怪!

最佳答案

只需删除 nls 函数调用中的 dat$ 即可。我相信它正在寻找 dat$dat$ttr 这显然会中断。也就是说,您的 bestFitD 函数应该是:

bestFitD <- function(dat,fun) {
res <- nls(ttr~fun(n,d),data=dat,start=list(d=25),trace=T)
return(res)
}

现在,使用 lapply 调用:

resL <- lapply(dData2, bestFitD, fun = fncTtr)

关于r - 最适合非线性数据帧列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15184176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com