r - 将 nls 应用于列表中的元素

标签 r list lapply nls

想象这两个列表如下:

seq<-seq(1,16)
L1<-list(A=seq, B=seq, C=seq, D=seq)

v1=c(11,15,17,19,21,22,24,25,26,27,28,28,29,29,30,30)
v2=c(14,19,23,24,26,27,28,29,30,30,31,32,32,32,32,33)
v3=c(2,4,5,6,6,7,8,8,9,9,9,10,10,10,11,11)
v4=c(8,13,17,20,22,24,26,27,28,29,30,31,32,33,33,34)
L2<-list(A=v1,B=v2,C=v3,D=v4)

现在我要做的是使用 nls 公式将特定模型与这些列表相匹配,L1$A 与 L2$A,L1$B 与 L2$B 等等。我可以单独使用每个向量,例如:

nls.A<-nls(L2.A~(a/b)*(1-exp(-b*L1.A)),
    start=list(a=1, b=0.1),
    trace= TRUE, data=data.frame(L1$A, L2$A))

但我想对每个列表的四个四个元素执行此操作,并检索一个对象,该对象也是一个包含所有四个($A、$B、$C、$D)拟合结果的列表。

我已经尝试过使用 for 循环,尽管它们不是很推荐,就像这样

for (i in L1) {
  nls(L2.i~(a/b)*(1-exp(-b*L1.i)),
      start=list(a=1, b=0.1),trace= TRUE,
  data=data.frame(L1$i, L2$i))
}

但这也不能回答我的问题(我真的需要该死的列表)我认为使用 lapply 的东西是理想的,但不知道如何使用 lapply 做这样的事情。有什么想法吗?

最佳答案

在匿名函数中使用apply

res <- mapply(function(x,y){
  nls(y~(a/b)*(1-exp(-b*x)),
      start=list(a=1, b=0.1),
      trace= TRUE, data=data.frame(x, y))
},L1,L2, SIMPLIFY=FALSE)

关于r - 将 nls 应用于列表中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25097472/

相关文章:

c - 使用 Swig 将字符串列表从 C 函数发送到 TCL 进程

r - 对数据帧列表进行最佳非线性拟合

r - 使用 lapply() 进行文本操作

r - 强制 Shiny 的应用程序在移动设备上显示桌面 View

R Shiny 组多个文本输出

r - 我如何对随机游走设置竞技场限制?

python - 将计数器与列表列表一起使用

regex - 在 R 中计算 strsplit 的输出

python - 使用生成器或理解从字典中创建一个二元组列表?

在 R 中使用 lapply 在函数调用中从向量返回实际函数参数