将列添加到在 R 中的 for 循环中使用 paste0 生成的数据库

Add column to a database generated with paste0 in for loop in R

我有 76 个数据框(288 行和 13 列),称为 dataset_id_1,...,dataset_id_76,通过 for 循环和列表生成:

List = list()
for (i in 1:76) {
  List[[i]] = subset(volping, id == i, select = -c(BetaCorrect, AlphaCorrect, AR, V_Ri2))
}

names(List) = paste0('dataset_id_',1:length(List))
list2env(List,envir = .GlobalEnv)

在这一步之后,我完成了额外的计算,为 76 个数据帧中的每一个找到一个参数 (alpha)。因此,我创建了一个名为 alpha 的列表,长度为 76,每个数据帧都有一个值。现在,我想添加一列,将列表中包含的特定参数分配给数据框(1、2、3、...、76)。但是,我无法添加带有典型 $ 或 [ ] 的列,因为它给我带来了问题。为了更清楚,我做了以下事情:

n = c(1:76)
alpha = list()
beta = list()

for (i in n) {

  dataset_regr = subset(get(paste0('dataset_id_',i)), TIME >= 740 & TIME < 991)
  
  y = dataset_regr$V_Ri-dataset_regr$V_Rf
  x = dataset_regr$V_Rm-dataset_regr$V_Rf
  
  regr = lm(y~x)
  
  alpha[i] = regr$coefficients[1] 
  beta[i] = regr$coefficients[2] 
  
  (get(paste0('dataset_id_',i)))$AlphaCorrect = alpha[i] #I get an error here
    
}  

生成的错误是:

(get(paste0("dataset_id_", i)))$AlphaCorrect = alpha[1] : 
  target of assignment expands to non-language object

你知道如何解决这个问题吗?

感谢您的支持。

正是出于这个原因,您的全局环境中不应有 76 个数据帧。管理它们非常困难。请改用列表。

lapply(split(volping, volping$id), function(tmp) {
  y = tmp$V_Ri-tmp$V_Rf
  x = tmp$V_Rm-tmp$V_Rf
  regr = lm(y~x)
  alpha = regr$coefficients[1] 
  beta = regr$coefficients[2] 
  tmp$AlphaCorrect <- alpha
  return(tmp)
}) -> result

如果您仍想继续拥有单独的数据框,您可以使用已有的代码。

names(result) = paste0('dataset_id_',1:length(result))
list2env(result, envir = .GlobalEnv)