Извлечение из списка списка data.frames в R? - PullRequest
0 голосов
/ 16 октября 2019

У меня есть список списка data.frames, который называется G.

. В BASE R мне было интересно, как можно отдельно извлечь элементы dint и SDв AA и BB, чьи имена столбцов data.frame содержат short del1 и del2 (см. мой желаемый вывод ниже)?

G <- list(AA = list(short = data.frame(dint = 5:7, SD = 0:2), short..2 = NULL, del1 = data.frame(dint = 1:3, SD = 2:4), 
               del1..2 = NULL, del2 = NULL), 

          BB = list(short = data.frame(dint = 1:4, SD = 2:5), short..2 = NULL, del1 = 
                 data.frame(dint = 5:6, SD = 3:4), del1..2 = NULL, del2 = data.frame(dint = 6, SD = 1)) )

Мой желаемый вывод:

# dints:
dints = list(
short = list(AA = c(short = 5:7), BB = c(short = 1:4)),
 del1 = list(AA = c(del1 = 1:3), BB = c(del1 = 5:6)),
 del2 = list(AA = c(del2 = NULL), BB = c(del2 = 6)))


# SDs:
SDs = list(
short = list(AA = c(short = 0:2), BB = c(short = 2:5)),
 del1 = list(AA = c(del1 = 2:4), BB = c(del1 = 3:4)),
 del2 = list(AA = c(del2 = NULL), BB = c(del2 = 1)))

1 Ответ

1 голос
/ 16 октября 2019

Я думаю, что эта функция должна извлечь то, что вам нужно.

foo <- function(G, val="dint", cols = c("short", "del1", "del2")) {
  named <- function(x, n) {if (is.null(x)) x else setNames(list(x), n)}  
  Map(function(col) Map(function(n) named(G[[n]][[col]][[val]], col), names(G)), cols)
}

dints <- foo(G, "dint")
SDs <- foo(G, "SD")

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...