我做了一個回圈來運行回歸模型的所有可能組合。因為我只需要保留模型的殘差,所以我這樣做了:
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 。我的錯誤是什么?
提前致謝!
對于第一個回圈:

對于第二個回圈:

uj5u.com熱心網友回復:
問題可以用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]])
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/467854.html
上一篇:Python乘法表學校練習
下一篇:二維陣列平均值和總c
