我如何将列名添加到 R 中的 for 循环
How do i add column names to my for-loop in R
我对 运行 回归模型的所有可能组合进行了循环。因为我只需要保留模型的残差,所以我这样做了:
df <- data.frame(t(combn(colnames(orig_df), m = 2)))
test = NULL
for (i in 1:(nrow(df)-1)) {
for (j in (i+1):nrow(df)) {
x <- lm(orig_df[[i]] ~ orig_df[[j]], data = orig_df)
y <- x$residuals
test <- cbind(test, y)
}
}
但是,我的问题是向新数据框添加名称(此处命名为“test”)。我认为区分残差的一个好方法是添加 x$call[2]
。
但是,如果我创建循环以便:
test = NULL
for (i in 1:(nrow(df)-1)) {
for (j in (i+1):nrow(df)) {
x <- lm(orig_df[[i]] ~ orig_df[[j]], data = Telekom)
y <- x$residuals
test <- cbind(test, y)
colnames(test) <- paste(x$call[2])
}
}
在此之后循环停止正常工作,显示的错误是:
length of 'dimnames' [2] not equal to array extent
。我这里的错误是什么?
提前致谢!
第一个循环:
第二个循环:
问题可以通过 mtcars
数据重现
> model <- lm(mtcars[[1]] ~ mtcars[[2]])
> model$call
lm(formula = mtcars[[1]] ~ mtcars[[2]])
之后我们可能会分配 call
> model$call[[2]] <- as.formula(paste0(names(mtcars)[1], "~ ", names(mtcars)[2]))
> model$call
lm(formula = mpg ~ cyl)
在 OP 的循环中,这个修改可能会起作用
test = NULL
for (i in 1:(nrow(df)-1)) {
for (j in (i+1):nrow(df)) {
x <- lm(orig_df[[i]] ~ orig_df[[j]], data = Telekom)
x$call[[2]] <- as.formula(paste0(names(orig_df)[i], "~ ", names(orig_df)[j])))
y <- x$residuals
test <- cbind(test, y)
colnames(test)[ncol(test)] <- paste(x$call[[2]])
}
}
我对 运行 回归模型的所有可能组合进行了循环。因为我只需要保留模型的残差,所以我这样做了:
df <- data.frame(t(combn(colnames(orig_df), m = 2)))
test = NULL
for (i in 1:(nrow(df)-1)) {
for (j in (i+1):nrow(df)) {
x <- lm(orig_df[[i]] ~ orig_df[[j]], data = orig_df)
y <- x$residuals
test <- cbind(test, y)
}
}
但是,我的问题是向新数据框添加名称(此处命名为“test”)。我认为区分残差的一个好方法是添加 x$call[2]
。
但是,如果我创建循环以便:
test = NULL
for (i in 1:(nrow(df)-1)) {
for (j in (i+1):nrow(df)) {
x <- lm(orig_df[[i]] ~ orig_df[[j]], data = Telekom)
y <- x$residuals
test <- cbind(test, y)
colnames(test) <- paste(x$call[2])
}
}
在此之后循环停止正常工作,显示的错误是:
length of 'dimnames' [2] not equal to array extent
。我这里的错误是什么?
提前致谢!
第一个循环:
第二个循环:
问题可以通过 mtcars
数据重现
> model <- lm(mtcars[[1]] ~ mtcars[[2]])
> model$call
lm(formula = mtcars[[1]] ~ mtcars[[2]])
之后我们可能会分配 call
> model$call[[2]] <- as.formula(paste0(names(mtcars)[1], "~ ", names(mtcars)[2]))
> model$call
lm(formula = mpg ~ cyl)
在 OP 的循环中,这个修改可能会起作用
test = NULL
for (i in 1:(nrow(df)-1)) {
for (j in (i+1):nrow(df)) {
x <- lm(orig_df[[i]] ~ orig_df[[j]], data = Telekom)
x$call[[2]] <- as.formula(paste0(names(orig_df)[i], "~ ", names(orig_df)[j])))
y <- x$residuals
test <- cbind(test, y)
colnames(test)[ncol(test)] <- paste(x$call[[2]])
}
}