【发布时间】:2015-09-10 15:20:15
【问题描述】:
想象一下我有以下列表
> test <- list("a" = 1, "b" = 2)
列表的每个元素都有一个名称:
> names(test)
现在,我想使用lapply() 提取该名称,因为我想在一个将使用 lapply 调用的新函数中使用它。我只是不知道如何提取每个元素的名称。
我尝试过使用deparse() 和substitute(),但结果很奇怪:
> lapply(test, function(x) {deparse(substitute(x))})
$a
[1] "X[[i]]"
$b
[1] "X[[i]]"
有人知道吗?
精度:
我想做这样的事情: 我有一个类似于 test 的列表:
> test <- list("a" = matrix(1, ncol = 3), "b" = matrix(2, ncol = 3))
我想对该列表应用一个函数来转换每个元素内的数据并为每一列指定一个特定的名称:
make_df <- function(x) {
output <- data.frame(x)
names(output) <- c("items", "type", NAME_OF_X)
return(output)
}
lapply(test, make_df)
预期的输出是:
> test
$a
[,1] [,2] [,3]
[1,] 1 1 1
attr(,"names")
[1] "index" "type" "a"
$b
[,1] [,2] [,3]
[1,] 2 2 2
attr(,"names")
[1] "index" "type" "b"
我不知道如何获取元素的名称来为我的第三列命名。
【问题讨论】:
-
尝试
lapply(names(test), function(x) test[[x]])循环使用names,您可以选择获取值和键 -
或
lapply(seq_along(test), function(i) names(test[i])) -
好的,第二个有效,但我想要一些适用于列表的东西,而不是
seq_along() -
@PAC 我展示了获取值的方法,但如果您只需要密钥
lapply(names(test), function(x) x) -
您想要获取列表元素的名称,而链接看起来与您想要的内容重复