【问题标题】:Infinite recursion with tidy after subseting list of nls - fits in r在对 nls 进行子集化列表后使用 tidy 进行无限递归 - 适合 r
【发布时间】:2016-03-11 16:01:03
【问题描述】:

我为以下数据拟合了一个模型,并希望使用“broom”包中的 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 适用于未由子集函数子集但在子集后出错的数据。有人知道吗?

【问题讨论】:

  • 似乎子集丢弃了看起来很整齐的组。我似乎 dfSampleCoef = tidy(dfSamplei %>% rowwise(), fitSample) 会解决这个问题。我无法完全解决“为什么”,所以也许其他人可以给出确切的原因并提供更完整的答案
  • 您正在使用 plyr dplyr?我认为通常建议使用两者之一,而不是两者。

标签: r


【解决方案1】:

您可以使用options(expressions = 10000) 增加允许的嵌套数量,但实际上是深层嵌套导致了Error: protect(): protection stack overflow,您无法仅通过增加expressions 的值来解决此问题。

相反,我建议您从 cmets 中采纳 Mr.Flick 的建议并使用:

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

而不是有问题的代码行。

一个不太理想的解决方案是在 R 启动时增加点堆栈大小:

R --max-pp-size=100000

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 2018-02-01
    • 2018-06-16
    • 2020-12-22
    • 2021-03-05
    • 1970-01-01
    相关资源
    最近更新 更多