![](/img/trans.png)
[英]“Error in lm.fit 0 (non-NA) cases” appears after running r script successfully many times
[英]How to handle Error in lm.fit (0 non-na cases) with createFolds function in R
我想使用 creatFolds function 和特定的 set.seed 運行回歸 model。
我可以在沒有 creatFolds function 的情況下運行回歸 model 而沒有錯誤。
弗里德曼數據集可以在這里找到
wdbc <- read_csv("friedman.dat", col_names = FALSE, skip = 10)
wdbc[] <- lapply(wdbc, scale)
回歸 model沒有createFolds Function
lm(X6 ~ ., data = wdbc)
Call:
lm(formula = X6 ~ ., data = wdbc)
Coefficients:
(Intercept) X1 X2 X3 X4 X5
2.553e-16 3.892e-01 3.563e-01 2.834e-04 5.739e-01 2.767e-01
回歸 model與createFolds Function
FX <- function(seed, data, k=30) {
set.seed(seed)
folds <- createFolds(data[, "X6"], k=k, list=TRUE, returnTrain=TRUE)
lm1 <- lapply(folds, function(folds) lm(X6 ~ ., data=data[folds, ]))
}
seeds <- 1:30
res <- lapply(seeds, FX, data=wdbc)
Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
0 (non-NA) cases
createFolds function 是有問題的部分:
createFolds(wdbc[, "X6"], k=1, list=TRUE, returnTrain=TRUE)
$Fold1
integer(0)
這給了你一個空向量,因此你正在回歸空白。 因此,當您執行以下不同調用時會有所不同:
typeof(wdbc[["X6"]])
[1] "double"
typeof(wdbc[,"X6"])
[1] "list"
typeof(as.matrix(wdbc)[,"X6"])
[1] "double"
也許其他更精通tibble等的人可以加入。
您可以將數據轉換為 data.frame 或使用data[["X6"]]
:
FX <- function(seed, data, k=30) {
set.seed(seed)
folds <- createFolds(data[["X6"]], k=k, list=TRUE, returnTrain=TRUE)
lm1 <- lapply(folds, function(folds) lm(X6 ~ ., data=data[folds, ]))
}
seeds <- 1:30
res <- lapply(seeds, FX, data=wdbc)
res[[1]][[1]]
Call:
lm(formula = X6 ~ ., data = data[folds, ])
Coefficients:
(Intercept) X1 X2 X3 X4 X5
0.0007255 0.3933912 0.3600078 -0.0008834 0.5733893 0.2729162
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.