【发布时间】:2018-02-10 18:26:14
【问题描述】:
我无法理解 purrr::map 的行为方式,例如,这是有效的:
irisList <- list(iris, iris, iris)
carsList <- list(cars, cars, cars)
airqualityList <- list(airquality, airquality, airquality)
irisList %>% map("Species") %>% str(vec.len = 2)
> List of 3 :
> $ : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 ...
> $ : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 ...
> $ : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 ...
carsList %>% map("speed") %>% str(vec.len = 2)
> List of 3
> $ : num [1:50] 4 4 7 7 8 ...
> $ : num [1:50] 4 4 7 7 8 ...
> $ : num [1:50] 4 4 7 7 8 ...
airqualityList %>% map("Ozone") %>% str(vec.len = 2)
> List of 3
> $ : int [1:153] 41 36 12 18 NA ...
> $ : int [1:153] 41 36 12 18 NA ...
> $ : int [1:153] 41 36 12 18 NA ...
这也有效:
mixedList <- list(iris, cars, airquality)
mixedList %>% map("Species") %>% str(vec.len = 2)
> List of 3
> $ : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 ...
> $ : NULL
> $ : NULL
重复但映射“速度”或“臭氧”会给出预期的响应。但是,如果我让它变得更复杂一些,事情就不会像我预期的那样返回:
unNamedList <- list(list(iris, iris, iris),
list(cars, cars, cars),
list(airquality, airquality,airquality))
unNamedList %>% map("Species")
> [[1]]
> NULL
> [[2]]
> NULL
> [[3]]
> NULL
根据 purrr 用户手册,如果我有一个命名列表,我应该能够执行以下操作:
namedIrisList <- list("iris1" = iris,
"iris2" = iris,
"iris3" = iris)
namedCarsList <- list("cars1" = cars,
"cars2" = cars,
"cars3" = cars)
namedAirqualityList <- list("aq1" = airquality,
"aq2" = airquality,
"aq3" = airquality)
aNamedList <- list("flowers" = namedIrisList,
"autos" = namedCarsList,
"aq" = namedAirqualityList)
aNamedList %>% map("flowers","Species")
> $flowers
> NULL
> $autos
> NULL
> $aq
> NULL
所以 purrr::map '知道' 'Species' 在哪里,但不返回任何东西。
既然我们知道“物种”的位置,这应该可以工作
aNamedList %>% map("flowers","iris1","Species")
但我得到了同样的回应。
> $flowers
> NULL
> $autos
> NULL
> $aq
> NULL
我想我不明白应该如何使用 map() 的提取能力。
上下文是我正在处理一个混合的引导结果列表,其中我想要的元素位于具有不同名称和结构的列表的大列表中。我一直在尝试访问“列表列表”组件,但我不断从 map() 中返回“空”。
【问题讨论】:
-
我使用
modify_depth(以前的at_depth)作为列表列表。 -
另外,
aNamedList %>% map("iris1", "Species")有效(不使用顶级列表的名称,因为这些是map循环遍历的列表)。