2017-02-13 61 views
0

我在下面的函數使用mapply Logistic模型:運行中的R

logModels <- function(data_idx_list,data) 

{ 
    x <- lapply(data_idx_list, function(m) 
     sparse.model.matrix(~.,data = data[m,])) 
    y <- lapply(data_idx_list, function(m) data$earlyR[m]) 

    logM <- mapply(function(x,y) { 
      cv.glmnet(x=x,y=y,family="binomial",alpha=0) 
}, x,y) 

return(logM) 

} 

其中x包含數據的5個樣品,並y是我的因變量。當我嘗試使用mapply我收到以下錯誤:

Error in glmnet(x, y, weights = weights, offset = offset, lambda = lambda, : number of observations in y (1) not equal to the number of rows of x (100000)

但是,當我運行模式如下原理:

lm1 = cv.glmnet(x=x[[1]],y=y,family="binomial",alpha=0) 

所以,我認爲我有我在接近x的方式中遇到了一些問題,例如我的mapply函數。

您的幫助將不勝感激。

回答

0

如果我正確理解你的問題,你只需要包裝ylist

logM <- mapply(function(x, y) cv.glmnet(x, y, family = "binomial", alpha = 0), 
       x, list(y)) 

y否則單個元素傳遞給您的GLM功能的連續調用。

另外,寫這個的更簡潔的方式:

logM <- mapply(cv.glmnet, x = x, y = list(y), family = "binomial", alpha = 0)) 
+0

謝謝您的回答..但,由於某種原因,這是行不通的。我試圖用你的語法,而我得到的下面的錯誤:_Error in glmnet(x,y,weights = weights,offset = offset,lambda = lambda,: y中的觀測值數量(5)不等於x的行數(100000)_(我也嘗試過使用'x = list(x)'代替,並且我得到以下錯誤:rep(1,N)中的_Error:無效的'times'argument_)。我相信它以某種方式連接到_indexing_部分。例如,當我使用循環運行時,logM2 [[i]] = cv.glmnet(x = x [[i]],y = y [[i]],family =「二項式」,alpha = 0) '它的工作 – staove7