R 为什么对循环使用粘贴返回错误?

R 为什么对循环使用粘贴返回错误?,r,for-loop,paste,R,For Loop,Paste,关于同一个话题,我有几个问题 (1) 我正在尝试循环: premium1999 <- as.data.frame(coef(summary(data1999_mod))[c(19:44), 1]) 但是,它返回错误:$运算符对于原子向量无效,即使我没有在这里使用$运算符 (2) 而且, 我想创建一列“year”,其中包含关联年份的重复值,并尝试循环此列: premium1999$year <- 1999 在这种情况下,它返回paste0(“premium”,i)[“year”]]

关于同一个话题,我有几个问题

(1) 我正在尝试循环:

premium1999 <- as.data.frame(coef(summary(data1999_mod))[c(19:44), 1])
但是,它返回
错误:$运算符对于原子向量无效,即使我没有在这里使用
$
运算符

(2) 而且, 我想创建一列“year”,其中包含关联年份的重复值,并尝试循环此列:

premium1999$year <- 1999
在这种情况下,它返回paste0(“premium”,i)[“year”]]中的
错误:下标超出范围

(3) 此外,我想重复一些行并循环:

premium1999 <- rbind(premium1999, premium1999[rep(1, 2),])

premium1999代码的问题是,paste0()函数返回字符,而不调用名称为该字符的对象。例如,
paste0('data',year,'u mod')
返回长度为1的字符向量,即,
“data1999\u mod”
并且不调用对象
data1999\u mod

为便于理解,
“data1999\u mod”[“Estimate”]
data1999\u mod[“Estimate”]
之间存在巨大差异。仅通过paste0()函数将子集设置为数据帧返回前者,但是,预期输出将仅由后者给出。这就是为什么您会得到,
Error:$运算符对于原子向量无效

在所有代码中都会发现相同的错误。为了通过paste0()函数的输出调用对象,我们需要通过get()将is括起来

由于您没有提供可复制的样品,我无法对其进行测试。但是,您可以尝试运行这些

#(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),])
}
#(1)
对于(以下年份)(19992008)){

paste0('premium',year)对于您的第1期,请尝试以下操作:For(seq(19992008)中的year){assign(paste0('premium',year')}在我看来,您使用的是不必要的循环。如果您指定示例数据输入和预期输出(请不要截屏),这将更容易帮助。我尝试了,但它仍然返回相同的错误。我将编辑有关线程上(1)问题的更多信息。我想从“data1999_mod”中提取回归估计值将第19行到第44行作为数据帧。非常感谢。我尝试了您给我的代码,但第一行和第三行仍然返回错误,第二行返回错误。我实际上尝试使用get()以前也是,但都不起作用..你能更新一个最小的可复制样本,这样我就可以运行代码并编辑我的答案了吗?嗨,非常感谢。我想我知道问题出在哪里了。代码get()毕竟是有效的。但是,左侧仍然返回“premium1999”,因为paste0()。因此,我创建了一个列表来存储每个数据帧,以便它可以由premium[[“Premium999”]]调用。通过这样做,我可以在括号内使用paste0(),并且可以正常工作。非常感谢您对paste0()代码的解释。
for (i in seq(1999,2008)) {
    assign(paste0('premium',i)[['year']], i) 
}
premium1999 <- rbind(premium1999, premium1999[rep(1, 2),])
for (year in seq(1999,2008)) {
    paste0('premium',year) <- rbind(paste0('premium',year), paste0('premium',year)[rep(1, 2),])
}
#(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),])
}