【发布时间】:2026-02-17 04:40:02
【问题描述】:
我有一个来自世界银行的数据的 data.frame,看起来像这样;
country date BirthRate US.
4 Aruba 2011 10.584 25354.8
5 Aruba 2010 10.804 24289.1
6 Aruba 2009 11.060 24639.9
7 Aruba 2008 11.346 27549.3
8 Aruba 2007 11.653 25921.3
9 Aruba 2006 11.977 24015.4
在这个数据框中总共有 70 个国家的子集,我想对其进行线性回归。
如果我使用以下内容,我会为一个国家/地区获得不错的 lm;
andora = subset(high.sub, country == "Andorra")
andora.lm = lm(BirthRate~US., data = andora)
anova(andora.lm)
summary(andora.lm)
但是当我尝试在 for 循环中使用相同类型的代码时,我会在代码下方打印一个错误;
high.sub = subset(highInc, date > 1999 & date < 2012)
high.sub <- na.omit(high.sub)
highnames <- unique(high.sub$country)
for (i in highnames) {
linmod <- lm(BirthRate~US., data = high.sub, subset = (country == "[i]"))
}
错误信息:
Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
0 (non-NA) cases
如果我可以让这个循环运行,我理想情况下希望将每个模型的系数甚至更好的 r 平方值附加到一个空的 data.frame。任何帮助将不胜感激。
谢谢
乔什
【问题讨论】:
-
去掉
i周围的引号和括号。 R 是不是宏语言。另外,您需要停止覆盖循环中的值。要么使用 lapply 返回列表中的值,要么学习索引列表元素。 -
@BondedDust,谢谢。这解决了我的问题。您能否提供一种方法来执行我正在尝试使用 lapply 执行的任务?
-
mods <- lapply( highnames, function(nm) lm(BirthRate~US., data = high.sub, subset = (country == nm)) ); mods[["Andorra"]] -
我想知道来自
nlme的lmList是否适合你。
标签: r dataframe regression linear-regression