2017-02-13 30 views
0

Я имею следующие функции:Запуск логистической модели с использованием mapply в 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

Если я правильно понимаю вашу проблему правильно, вам просто нужно обернуть y в list:

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 в glmnet (x, y, weight = weight, offset = offset, lambda = lambda,: Число наблюдений в y (5), не равное количеству строк x (100000) _ (Я также попытался вместо этого использовать 'x = list (x)', и я получаю следующую ошибку: _Error в rep (1, N): недопустимый аргумент «times»). Я считаю, что он каким-то образом связан с частью _indexing_.Например, когда я запускаю его с помощью цикла, 'logM2 [[i]] = cv.glmnet (x = x [[i]], y = y [[i]], family =" binomial ", alpha = 0) 'это работает – staove7