2015-02-25 2 views
1

Я создал следующую функцию с намерением применить две итерации lapply.Применение вложенных функций сложения

«x» здесь будет список из 10 кадров данных, каждый из которых имеет первый столбец в качестве переменной ответа.

Во-первых, я применяю lapply для запуска 'lm' на этих данных, передавая список, который их содержит, и указывая первый столбец как ответ и выполняющий lm для всех переменных в соответствующем фрейме данных.

Затем я хочу создать столбец в каждом кадре данных, который будет содержать установленные значения после применения «lm».

runit<-function(x){ 
    {lapply(x,function(data){lm(reformulate(termlabels=".", 
     response=names(data)[1]),data)}) 
    } 

    { 
    lapply(x,function(data){data$fitted<-fitted(data)}) 
    } 
    } 

Это не работает. Я получаю 'нуль' в качестве выходного сигнала, как только это будет работать

runit(listcontainingdataframes) 
[[1]] 
NULL 

[[2]] 
NULL 

[[3]] 
NULL 

[[4]] 
NULL 

ответ

1
#No need for two `lapply` 
x<-list(mtcars,iris) 
lapply(x,function(data){ 
        data$result<-lm(reformulate(termlabels=".",response=names(data)[1]),data)$fitted 
    return(data) 
     } 
) 
+0

Спасибо, это не работает, к сожалению. Я получаю сообщение об ошибке «Ошибка в' $ <-. Data.frame' ('* tmp *', "result", value = c (-4.29725218642032,: замена имеет 29 строк, данные имеют 53 " – oivemaria

+0

Я тестировал код для выборки данных.Это работает.Может быть проблема с вашим фреймом данных. – Metrics

+1

Да, я проверяю, что есть один dataframe, для которого эта ошибка проходит. Я пытаюсь выяснить, почему – oivemaria

1

Это сработало:

hellow<-lapply(x,function(data){ 
    data$result<-fitted(lm(reformulate 
(termlabels=".",response=names(data)[1]),data,na.action="na.exclude")) 
return(data) 
} 
) 

Но теперь, когда я использую

list2env(hellow,.GlobalEnv) 

конвертировать список «Хеллоу 'к отдельным кадрам данных, я получаю

Error in list2env(hellow, .GlobalEnv) : 
    names(x) must be a character vector of the same length as x 

Я понимаю, что в списке нет ни одного имени, следовательно, ошибки. Но как я мог пройти мимо него, не назначая имена для каждого из элементов в списке.

Thanks Metrics and Richard

+0

Легко назначать имена, используя' setNames (hellow, paste0 ('dat', seq_along (hel low)) ' – akrun

+0

ну, в списке« x »содержатся данные, в идеале ему бы просто просто сохранить имена файлов данных, содержащихся в x, но даже после того, как они были созданы, похоже, не сохраняли никаких имен. Я пробовал имена (x), и он показывает NULL точно так же, как имена (hellow) делает – oivemaria

+0

Если вы уже создали объекты data.frame, они должны быть там в 'ls (pattern = '...)' – akrun

Смежные вопросы