将列添加到在 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)
我有 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)