无限递归,具有整齐的nls子集列表-适合r

无限递归,具有整齐的nls子集列表-适合r,r,R,我用以下数据拟合了一个模型,并希望使用“扫帚”包中的tidy函数来总结模型结果 library(plyr) library(dplyr) library(minpack.lm) library(broom) Sample = as.factor(c("a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","b","b","b","b","b","b","b","b","b","b","b","b",

我用以下数据拟合了一个模型,并希望使用“扫帚”包中的tidy函数来总结模型结果

library(plyr)
library(dplyr)
library(minpack.lm)
library(broom)

Sample = as.factor(c("a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b"))
X = c(0.0,2.1,7.0,9.2,14.0,16.1,42.0,49.0,56.1,65.1,79.0,91.0,105.0,119.2,133.0,147.0,163.0,183.1,219.0,10.0,12.1,17.0,19.1,24.0,26.1,52.0,59.0,66.1,75.2,89.0,101.0,115.0,129.1,143.0,157.0,173.0,193.1,229.0)
Y = c(0.0,1.3,7.4,11.7,16.6,18.0,36.8,39.5,42.5,46.3,51.8,57.3,61.5,64.0,67.6,74.7,72.5,76.9,83.4,20.3,25.0,31.8,36.3,41.6,43.4,68.0,71.8,76.3,81.5,88.2,95.5,101.7,105.6,111.5,115.2,119.3,126.4,132.8)
df = data.frame(Sample,X,Y)

 #doing the fit wraped in try() because some models fail because of the wrong starting values
dfSample = df %>% group_by(Sample) %>%
  do(fitSample = try(nlsLM(Y~CA*(1-exp(-k1*X))+CB*(1-exp(-k2*X)), data = .,
                       start=list(k1=(0.07), k2=(0.08),  CA=7, CB=23))))

#subsetting for successful models
elim = "Error in nlsModel"
dfSamplei = subset(dfSample, !grepl(paste(elim), dfSample$fitSample))

#tidy the outcome
dfSampleCoef = tidy(dfSamplei, fitSample)

#Error: evaluation nested too deeply: infinite recursion / options(expressions=)?
#Error during wrapup: evaluation nested too deeply: infinite recursion / options(expressions=)

tidy可以很好地处理未通过子集函数进行子集划分的数据,但在子集划分后会出现错误。有人有线索吗?

您可以使用
选项(expressions=10000)
增加允许的嵌套数,但实际情况是,深嵌套正在导致
错误:protect():保护堆栈溢出
,仅通过增加
表达式的值是无法避免的

相反,我建议您从评论中采纳Flick先生的建议,并使用:

dfSampleCoef=tidy(dfSamplei%>%rowwise(),fitSample)

而不是有问题的代码行

较不理想的解决方案是在R开始时增加点堆栈大小:


R--max pp size=100000

该子集似乎删除了看起来很整洁的组。我认为
dfSampleCoef=tidy(dfSamplei%>%rowwise(),fitSample)
可以解决此问题。我不能完全回答“为什么”,所以也许其他人可以给出确切的原因,并提供一个更完整的答案您正在使用plyr和dplyr?我认为一般建议使用其中一个,而不是两个。