我正在處理10個訓練數據集train1到train10,並且希望用1個代碼塊重複1到10的以下語句:在list2serv中合併多個函數參數(lapply(),)
train_y_1 <- c(train1$y)
train1$y <-NULL
train_x_1 <- data.matrix(train1)
olsfit_1 <- cv.glmnet(y=train_y_1, x=train_x_1, alpha=1, family="gaussian")
我在論壇上看到lapply()比循環更適合。我的代碼:
# Create empty data frames and list (to be populated with values in main program)
list2env(setNames(lapply(1:10, function(i) data.frame()), paste0('train_y_', 1:10)), envir=.GlobalEnv)
list2env(setNames(lapply(1:10, function(i) data.frame()), paste0('train_x_', 1:10)), envir=.GlobalEnv)
list2env(setNames(lapply(1:10, function(i) list()), paste0('lasso_', 1:10)), envir=.GlobalEnv)
# Create y and x input matrices and run ten lasso regressions
list2env(lapply(mget(paste0('train', 1:10)), mget(paste0('train_y_', 1:10)), mget(paste0('train_x_', 1:10)), mget(paste0('lasso_', 1:10)),
function(a,b,c,d)
{
b <- c(a$y);
a$y <- NULL;
c <- data.matrix(a);
d <- cv.glmnet(y=b, x=c, alpha=1, family="gaussian");
}), envir=.GlobalEnv)
其產生錯誤消息:
Error in match.fun(FUN) :
'mget(paste0("train_y_", 1:10))' is not a function, character or symbol
所以看起來R由四個MGET(),我打算在值進行讀取的一個功能相混淆,B ,c,d參數,但我不知道下一步如何繼續。
有什麼建議嗎?
非常好,謝謝。我爲train1-train10列表添加了「train < - lapply(1:10,function(x){paste0(」train「,x)})」。我收到一條錯誤消息:當我運行代碼時,「$ y:$運算符中的錯誤對於原子向量無效」 – RobertF
@RobertF「train」應該是實際訓練數據集的列表,如果我正在閱讀此權限。所以,如果你把它們全部放在你的全球環境中,我想'train < - mget(paste0(「train」,1:10))' – jenesaisquoi
好多了,謝謝!該程序似乎運行正常,雖然它不保存b,c和d的輸出數據幀。如果你想返回多個值,將它們包裝在一個列表中,也就是'list(a = a,b = b,c = c,d = d)' – RobertF