【发布时间】:2017-07-20 16:20:12
【问题描述】:
我正在尝试在一个相当大的数据框上运行拟合函数,该数据框由名为 "big_group" 和 'small_group' 的变量分组。
特别是,我试图获取big_group 内部每个small_group 的预测和系数值。
也就是说,我正在尝试将这些新列添加到 do({ 函数末尾的新 data.frame 中。
由于缺少数据点或“初始参数估计时的奇异梯度矩阵”错误,无法拟合此数据的某些组。
所以,我使用了how-do-i-ignore-errors-and-continue-processing-list-items 这篇帖子中的tryCatch 方法,并使用了@Koshke 的以下答案
OTH,解决这个问题后,我遇到了一个错误说
错误:结果不是位置的数据帧:3
关于这个错误有一些discussions,但我不知道如何解决我的问题。
这是我的可重现示例; (此示例与我的真实数据相似,这就是我构建此示例的原因)
library(minpack.lm)
library(dplyr)
set.seed(100)
data.list <- lapply(1:2, function(big_group) {
xx <- c(sort(runif(5,1,5)),sort(runif(5,-8,-2)), rep(5,2)) ##I intentionall added the last two 5 to get unfitted groups
yy<- sort(runif(12,0,10))
small_group <- rep(c('a','b','c'),times=c(5,5,2)) ##small groups in under the big_group
df <- data.frame(xx,yy,small_group,big_group)
df <- df%>%
group_by(big_group,small_group)%>%
do({
#fitting part
fit <- tryCatch(nlsLM(yy~k*xx/2+U, start=c(k=1,U=5), data = ., trace=T,
control = nls.lm.control(maxiter=100)),error=function(e) NULL)
if(!("NULL" %in% class(fit))){
new.range<- data.frame(xx=seq(1,10,length.out=nrow(.)))
predicted <- predict(fit, newdata =new.range)
coefs <- data.frame(k=coef(fit)[1],U=coef(fit)[2])
data.frame(., new.range,predicted,coefs,row.names=NULL) ##This is the part the error came from I guess!
}})
})
这就是数据的样子; @RomanLuštrik
data.list <- lapply(1:2, function(big_group) {
xx <- c(sort(runif(5,1,5)),sort(runif(5,-8,-2)), rep(5,2)) ##I intentionall added the last two 5 to get unfitted groups
yy<- sort(runif(12,0,10))
small_group <- rep(c('a','b','c'),times=c(5,5,2)) ##small groups in under the big_group
df <- data.frame(xx,yy,small_group,big_group)
})
df <- bind_rows(data.list)
> df
xx yy small_group big_group
1 1.685681 1.302889 a 1
2 2.680406 1.804072 a 1
3 3.153395 3.306605 a 1
4 3.995889 3.486920 a 1
5 4.081206 6.293909 a 1
6 -6.333657 6.952741 b 1
7 -5.070164 7.775844 b 1
8 -4.705420 8.273034 b 1
9 -2.708278 8.651205 b 1
10 -2.428970 8.894535 b 1
11 5.000000 9.541577 c 1
12 5.000000 9.895641 c 1
13 1.830856 1.234872 a 2
14 2.964927 2.114086 a 2
15 3.413297 2.299059 a 2
16 4.121434 2.533907 a 2
17 4.536908 3.577738 a 2
18 -6.807926 4.451480 b 2
19 -6.585834 4.637012 b 2
20 -6.350680 5.913211 b 2
21 -6.157485 5.975753 b 2
22 -6.016821 6.471012 b 2
23 5.000000 6.763982 c 2
24 5.000000 9.605731 c 2
【问题讨论】: