我有以下回圈在 5 個不同的資料集上運行 5 個不同的隨機森林模型(這些資料集在一個串列物件中):
# Base Loop : Works Fine
results_1 <- list()
results_2 <- list()
for (i in 1:5){
model_i <- randomForest(class ~ height weight salary, data = X[[i]])
predict_i <- data.frame(predict(model_i , test_set ,type="prob"))
predict_i$id = 1:nrow(predict_i)
results_1[[i]] <- model_i
results_2[[i]] <- predict_i
}
我想使用“model_i.RDS”格式保存每個模型(在“我的檔案”中)。如果這可行,將在“我的檔案”中保存/創建 5 個 RDS 檔案(model_1.RDS、model_2.RDS、model_3.RDS、model_4.RDS、model_5.RDS)。
我認為 R 會自己解決這個問題,因為我已經定義了“索引 i”:
# Method 1: Does Not Work
results_1 <- list()
results_2 <- list()
for (i in 1:5){
model_i <- randomForest(class ~ height weight salary, data = X[[i]])
saveRDS(model_i, "model_i.RDS")
predict_i <- data.frame(predict(model_i , test_set ,type="prob"))
predict_i$id = 1:nrow(predict_i)
results_1[[i]] <- model_i
results_2[[i]] <- predict_i
}
但這只是保存一個“RDS”檔案。
然后我嘗試更明確地使用保存命令:
# Method 2: Also Not Working
wd = getwd()
results_1 <- list()
results_2 <- list()
for (i in 1:5){
model_i <- randomForest(class ~ height weight salary, data = X[[i]])
saveRDS(model_i, paste0("wd", paste("model_", i, ".RDS")))
predict_i <- data.frame(predict(model_i , test_set ,type="prob"))
predict_i$id = 1:nrow(predict_i)
results_1[[i]] <- model_i
results_2[[i]] <- predict_i
}
但這仍然不起作用(正在保存一個檔案而不是 5 個檔案)。
有人可以告訴我如何解決這個問題嗎?
注意:問題的示例資料:
library(randomForest)
test_set = data.frame( class = as.factor(sample(c(0,1), replace=TRUE, size=100)), height = rnorm(100,100,100), weight = rnorm(100,100,100), salary = rnorm(100,100,100))
train_data_1 = data.frame( class = as.factor(sample(c(0,1), replace=TRUE, size=100)), height = rnorm(100,100,100), weight = rnorm(100,100,100), salary = rnorm(100,100,100))
train_data_2 = data.frame( class = as.factor(sample(c(0,1), replace=TRUE, size=100)), height = rnorm(100,100,100), weight = rnorm(100,100,100), salary = rnorm(100,100,100))
train_data_3 = data.frame( class = as.factor(sample(c(0,1), replace=TRUE, size=100)), height = rnorm(100,100,100), weight = rnorm(100,100,100), salary = rnorm(100,100,100))
train_data_4 = data.frame( class = as.factor(sample(c(0,1), replace=TRUE, size=100)), height = rnorm(100,100,100), weight = rnorm(100,100,100), salary = rnorm(100,100,100))
train_data_5 = data.frame( class = as.factor(sample(c(0,1), replace=TRUE, size=100)), height = rnorm(100,100,100), weight = rnorm(100,100,100), salary = rnorm(100,100,100))
# data used in question
X = list(train_data_1, train_data_2, train_data_3, train_data_4, train_data_5)
uj5u.com熱心網友回復:
在最后一次嘗試中,OP 使用了paste.,但/作業目錄和檔案名之間沒有 - 使用更安全file.path。此外,wd使用的 was"wd"將按字面意思代替存盤在物件中的值。相反,它可以是paste0(wd, "/model_", i, ".RDS")
results_1 <- vector('list', 5)
results_2 <- vector('list', 5)
for (i in 1:5){
model_i <- randomForest(class ~ height weight salary, data = X[[i]])
saveRDS(model_i, file.path(wd, paste0("model_", i, ".RDS")))
predict_i <- data.frame(predict(model_i , test_set ,type="prob"))
predict_i$id = 1:nrow(predict_i)
results_1[[i]] <- model_i
results_2[[i]] <- predict_i
}
-輸出

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/490973.html
