Изменить количество чисел в большом списке и удалить пустые объекты

У меня есть большой список с 28 объектами, некоторые из которых пустые, а некоторые более или менее 165 значений. Резюме (stim10)

      Length Class  Mode   
 [1,] 165    factor numeric
 [2,]   0    factor numeric
 [3,] 165    -none- numeric
 [4,]   0    -none- numeric
 [5,] 166    -none- numeric
 [6,]   0    -none- numeric
 [7,] 166    -none- numeric

и т.п.

Теперь я хочу получить эти значения в data.frame, чтобы я мог их анализировать и экспортировать. Я использую для удаления объекта

stim10[[2]]<-NULL. 

Это должно быть сделано от наименьшего к наименьшему номеру объекта, поскольку он удаляет весь объект и изменяет порядок. Код, который я использую, чтобы сделать все объекты одинаковой длины, чтобы подготовить их для фрейма данных:

stim10[[3]]<-stim10[[3]][1:163]

Где 163 - это наименьшая длина объекта со значениями.

Сейчас это работает, но я хотел бы иметь более элегантный способ сделать это, так как мне придется применить это к 38 подмножествам данных. Я пытался использовать функцию apply различными способами, но всякий раз, когда я пытаюсь это сделать, выдает ошибку, что мне не хватает функции. В первой строке кода я попытался использовать метод assign(), но снова возвращается, что у меня нет функции.

Боюсь, я просто недостаточно хорошо понимаю группу функций применения, чтобы применять ее здесь. Ваша помощь очень ценится.

2 ответа

Выберите элементы ненулевой длины с stim10[lengths(stim10) != 0]затем используйте lapply с функцией head чтобы получить только первые 163 номера:

lapply(stim10[lengths(stim10) != 0], head, 163)

В то время как stim10[lengths(stim10) != 0]не получилось как-то выделить только объект в списке со значениями. stim10[lapply(stim10,length)>0]сделал это, выбрав все объекты больше 0 (а не 0). Затем применив это к решению @bergant works:

lapply(stim10[lapply(stim10,length)>0], head, 163)
Другие вопросы по тегам