我正在尝试使用lapply
中的map
或purrr
来检索列表中的名称,作为我正在构建的更大函数的一部分,但我不断得到意想不到的结果。例如:
MyList=list(x=1:5, y=6:10)
> MyList
$x
[1] 1 2 3 4 5
$y
[1] 6 7 8 9 10
names(MyList)
[1] "x" "y"
### seems OK
map(MyList,names)
$x
NULL
$y
NULL
map_chr(MyList,names)
Error: Result 1 is not a length 1 atomic vector
lapply()
提供与map()
相同的结果。我得到的对象是list
,其元素具有我想要的名称,但每个元素的内容都是NULL
。我想提取名称本身,无论是作为列表中的元素还是作为字符向量。为什么会这样?我应该怎样做到这一点?
答案 0 :(得分:3)
不幸的是,无法使用map
或lapply
获取元素名称。当我在map
或lapply
中使用自定义函数时,需要元素名称I {1} map
覆盖m个元素名称的向量,然后从中提取数据列表使用它。这是一个例子:
library(dplyr)
library(purrr)
MyList = list(Normal = rnorm(1000),
Gamma = rgamma(1000, shape = 4),
Weibull = rweibull(1000, shape = 1))
ListNames <- names(MyList)
ListNames %>%
walk(function(x) { # walk is another version of map
data <- MyList[[x]]
cat("\nMean of ", x, "is ", mean(data))
cat("\nMedian of ", x, "is ", median(data))
})
给出了:
Mean of Normal is 0.03043051
Median of Normal is 0.01864171
Mean of Gamma is 3.884722
Median of Gamma is 3.500294
Mean of Weibull is 0.9854814
Median of Weibull is 0.6707907