我有几个问题是关于同一主题的。
(1)我正在尝试循环。
premium1999 <- as.data.frame(coef(summary(data1999_mod))[c(19:44), 1])
for 10年,我在其中写道。
for (year in seq(1999,2008)) {
paste0('premium',year) <- as.data.frame(coef(summary(paste0('data',year,'_mod')))[c(19:44), 1])
}
注:for data1999_mod
是回归结果,我想提取它的一些估计值作为一个数据框向量。我想提取它的一些估计器作为数据框架向量。coef(summary(data1999_mod))
看起来像这样。
#A matrix: ... of type dbl
Estimate Std. Error t value Pr(>|t|)
age 0.0388573570 2.196772e-03 17.6883885 3.362887e-6
age_sqr -0.0003065876 2.790296e-05 -10.9876373 5.826926e-28
relation 0.0724525759 9.168118e-03 7.9026659 2.950318e-15
sex -0.1348453659 8.970138e-03 -15.0326966 1.201003e-50
marital 0.0782049161 8.928773e-03 8.7587533 2.217825e-18
reg 0.1691004469 1.132230e-02 14.9351735 5.082589e-50
...
然而,它返回的是 Error: $ operator is invalid for atomic vectors
,即使我没有使用 $
操作符在这里。
(2)另外,我想创建一个列'年份',其中包含相关年份的重复值,并试图在此循环。
premium1999$year <- 1999
我在其中写道:
for (i in seq(1999,2008)) {
assign(paste0('premium',i)[['year']], i)
}
在这种情况下,它返回 Error in paste0("premium", i)[["year"]]: subscript out of bounds
(3)此外,我还想重复一些行,循环过来。
premium1999 <- rbind(premium1999, premium1999[rep(1, 2),])
10年,我又写了。
for (year in seq(1999,2008)) {
paste0('premium',year) <- rbind(paste0('premium',year), paste0('premium',year)[rep(1, 2),])
}
这一次它返回 Error in paste0("premium", year)[rep(1, 2), ]: incorrect number of dimensions
我也试着在其他一些类似的东西上循环,但我总是得到Error。
每个代码都能单独正常工作。
我找不到我做错了什么。如果有任何帮助或建议,我将非常感激。
这段代码的问题在于,粘贴0()函数返回了这个字符,而不是调用作为这个字符的名称的对象。比如说 paste0('data',year,'_mod')
返回一个长度为1的字符向量,即。"data1999_mod"
而不是调用对象 data1999_mod
.
为了便于理解,两者之间有很大的区别。"data1999_mod"["Estimate"]
和 data1999_mod["Estimate"]
. 仅仅通过粘贴0()函数将数据框子集返回前者,然而,预期的输出将只由后者给出。这就是为什么你会得到。Error: $ operator is invalid for atomic vectors
.
在你所有的代码中都发现了同样的错误。为了通过粘贴0()函数的输出来调用对象,我们需要用get()括起来。
由于,你没有提供可重复的示例,我无法测试它。不过,你可以尝试运行这些。
#(1)
for (year in seq(1999,2008)) {
paste0('premium',year) <- as.data.frame(coef(summary(get(paste0('data',year,'_mod'))))[c(19:44), 1])
}
#(2)
for (i in seq(1999,2008)) {
assign(get(paste0('premium',i))[['year']], i)
}
#(3)
for (year in seq(1999,2008)) {
paste0('premium',year) <- rbind(get(paste0('premium',year)), get(paste0('premium',year))[rep(1, 2),])
}