Изменить количество чисел в большом списке и удалить пустые объекты
У меня есть большой список с 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)