Я пытаюсь построить список списков в R с помощью функции apply, а не цикла, но у меня возникают проблемы с преобразованием рабочего цикла в формат lapply.Позвольте мне объяснить ситуацию немного подробнее:
У меня есть функция в R (getDetails
), которая извлекает детали, связанные с параметрами, которые я передаю функции, и возвращает результат в виде списка.Функция работает хорошо, если я передаю ей одну запись, и я также построил цикл, который позволяет мне циклически проходить по кадрам данных по одной строке за раз и передавать элементы данных, строка за строкой, моемуфункция, которая в свою очередь возвращает список в i-й элемент моего списка списков (detailsList[[i]]
).Я пытаюсь выяснить, как преобразовать цикл for в функцию применения.Можете ли вы помочь мне с этим?Я создал игрушечный пример, который, если я смогу работать, позволит мне обобщить это для моей фактической getDetails
функции.
#use cars dataset for an example
data(cars)
#get number of rows
numrows<-dim(cars)[1]
#initialize empty list
detailsList<-vector("list", numrows)
#This is a toy example of the loop I want to convert to an apply
#I'm having trouble because this builds up a list and returns the results
#to my detailsList one element at a time and I'm not sure how to do this
#in an apply.
for (i in 1:numrows){
detailsList[[i]]<-getDetails(cars[i,])
}
detailsList
getDetails<-function(parameters){
valueA<-parameters[1]+45
valueB<-parameters[1]+10
list(valueA, valueB)
}
ОБНОВЛЕНИЕ:
Я думал, что только что понял это, но, кажется, когда я делаю это, я получаю третье измерение в своем списке, поэтому, когда я использую это:
allDetails <- lapply(1:numrows, function(i) getDetails(cars[i,]))
, только второй элемент первого списка можетполучить доступ с allDetails[[1]][[1]][2]
вместо allDetails[[1]][2]
, как я и надеялся.Кто-нибудь знает, что я здесь делаю не так?