R 用户,我仍然在讨论与我最初的问题相关的点点滴滴,如此处所示,现在我很困惑。
http://stackoverflow.com/questions/12270578/skipping-over-an-error-warning-in-an-lme-loop-in-r
这是使用 mtcars 作为示例数据集的代码。我想保存下面列出的每个响应变量的上下置信区间(但不是截距,尽管我仍然需要 lme 的其他系数,但我已经有了),一次完成(我的真实数据集非常大,我正在尝试尽可能地自动化它)
library(log10)
library(nlme)
library(lattice)
responseVariables = c("mpg",
"disp",
"hp")
carModels <- list()
carModelNames <- list()
coint<- list()
coint2<- list()
coint$fixed <- list()
lower<- list()
upper<- list()
carCIlower <- list()
carCIupper <- list()
for (i in responseVariables){
print("Doing: ")
print(i)
mtcars$tmp <- as.numeric(mtcars[,i])
tmpLme <- lme( log10(tmp) ~ I(log10(wt)), random = ~1 | carb / gear / am, data=mtcars,na.action=na.omit )
carModels <- append(carModels, list(tmpLme))
carModelNames <- append(carModelNames,i)
coint <- try(intervals(tmpLme))
if (inherits(coint, "try-error")) {
tmpLme <- lme(log10(tmp) ~ log10(wt), random = ~1 | carb / gear, data=mtcars, na.action=na.omit);
coint <- try(intervals(tmpLme));
} else if (inherits(coint, "try-error")) {
tmpLme <- lme(log10(tmp) ~ log10(wt), random = ~1 | carb / gear, data=mtcars, na.action=na.omit, method="ML");
coint <- try(intervals(tmpLme));
} else if (inherits(coint, "try-error")) {
tmpLme <- lme(log10(tmp) ~ log10(wt), random = ~1 | carb, data=mtcars, na.action=na.omit);
coint <- try(intervals(tmpLme));
#}
coint2<- append(coint, list(tmpLme))
lower <- dim(coint2$fixed)[1]
upper <- dim(coint2$fixed)[1]
carCIlower <- append(carCIlower, coint2$fixed[2,1],lower)
carCIupper <- append(carCIupper, coint2$fixed[2,3],upper)
vs_wt <- cbind(carModelNames , carCIlower , carCIlower )
}
}
目前,如果我为每个响应变量运行命令,我可以获得 CI 值,但不能作为循环的一部分。循环不会超过 coint2 语句。好吧,但它没有给我关于 coint2 及以后的答案。或者,如果我再次运行这些行,它只会给我循环中最后一项的值(i=hp)。此外,我看到有一个不平衡的大括号(我已将其注释掉以向您展示),但如果我使用它,我会为所有 resp 变量的下 CI 和上 CI 提供“disp”的下 CI。
有人可以指出缺少什么吗?