2015-02-18 2 views
1

Я вложенная структура, как:Применить функцию над списком списков dataframes в R

  • родительского список 'родителя из переменного числа элементов
  • Каждого узла родителя список представляет собой список из трех названных элементов (скажем, «Foo», «бара», «щенок»)
  • этих (названные) элементов внутреннего списка являются dataframes из переменного числа столбцов

(это даже сложно я на самом деле создаю воспроизводимый пример этой структуры)

Я ищу эффективный способ применения функции (допустим, toLower) к каждой ячейке внутренних фреймов данных, ofc для каждого элемента родительского списка.

Я думаю, что я мог бы гнездятся некоторые lapply, но я понятия не имею о том, как ссылаться на внутренние элементы и какие FUN использовать в качестве параметра lapply сам

TNX за помощь!

+3

Это может быть трудно получить воспроизводимый пример, но без него обеспечивая решение еще сложнее. Я могу только указать вам на «rapply», что может помочь или нет. – Roland

ответ

3

Если я правильно понял, у вас есть структура вроде этого:

parent <- list(
    a=list(foo=data.frame(first=c(1,2,3), second=c(4,5,6)), 
     bar=data.frame(first=c(1,2,3), second=c(4,5,6)), 
     puppy=data.frame(first=c(1,2,3), second=c(4,5,6)) 
    ), 
    b=list(foo=data.frame(first=c(1,2,3), second=c(4,5,6)), 
     bar=data.frame(first=c(1,2,3), second=c(4,5,6)), 
     puppy=data.frame(first=c(1,2,3), second=c(4,5,6)) 
    ) 
    ) 

И вы хотите, чтобы запустить функцию f, которая применяется к каждому скаляра в кадрах данных, над parent, это правильно?

Если да, то следующая функция nested_lapply должна сделать:

nested_lapply <- function(data, fun) { 
    lapply(data, function(sublist) { lapply(sublist, fun) }) 
} 

Он может применяться как так:

nested_lapply(parent, sqrt) 
+0

tnx, работает отлично! –