如何命名不同R列表元素的元素?
How to name the elements of different R list elements?
我正在寻找一种有效的方法来使用一个公共名称向量来命名不同列表元素的元素。假设我有以下列表:
# starting list
test <- list(a = c("name1", "name2", "name3"),
b = c(0.1, 0.2, 0.3),
c = c(TRUE, FALSE, TRUE))
看起来像
test
$a
[1] "name1" "name2" "name3"
$b
[1] 0.1 0.2 0.3
$c
[1] TRUE FALSE TRUE
我想获得类似的东西
$b
name1 name2 name3
0.1 0.2 0.3
$c
name1 name2 name3
TRUE FALSE TRUE
我知道这可以通过类似...
names(test[[2]]) <- test$a
names(test[[3]]) <- test$a
test$a <- NULL
但这只有在列表元素数量较少的情况下才可行。我假设这可以通过一行代码获得。我已经尝试过 lapply(test, FUN = function(x) names(x)[] <- test$a)
之类的方法,但这并没有给出预期的结果。
提前致谢!
setNames
等同于函数式编程的 `names<-`
:
lapply(test[-1], setNames, test$a)
#$b
#name1 name2 name3
# 0.1 0.2 0.3
#
#$c
#name1 name2 name3
# TRUE FALSE TRUE
nm=which(names(test)=="a")
whc=c("b","c")
lapply(test[whc],function(x){names(x)=test[[nm]];x})
$b
name1 name2 name3
0.1 0.2 0.3
$c
name1 name2 name3
TRUE FALSE TRUE
我正在寻找一种有效的方法来使用一个公共名称向量来命名不同列表元素的元素。假设我有以下列表:
# starting list
test <- list(a = c("name1", "name2", "name3"),
b = c(0.1, 0.2, 0.3),
c = c(TRUE, FALSE, TRUE))
看起来像
test
$a
[1] "name1" "name2" "name3"
$b
[1] 0.1 0.2 0.3
$c
[1] TRUE FALSE TRUE
我想获得类似的东西
$b
name1 name2 name3
0.1 0.2 0.3
$c
name1 name2 name3
TRUE FALSE TRUE
我知道这可以通过类似...
names(test[[2]]) <- test$a
names(test[[3]]) <- test$a
test$a <- NULL
但这只有在列表元素数量较少的情况下才可行。我假设这可以通过一行代码获得。我已经尝试过 lapply(test, FUN = function(x) names(x)[] <- test$a)
之类的方法,但这并没有给出预期的结果。
提前致谢!
setNames
等同于函数式编程的 `names<-`
:
lapply(test[-1], setNames, test$a)
#$b
#name1 name2 name3
# 0.1 0.2 0.3
#
#$c
#name1 name2 name3
# TRUE FALSE TRUE
nm=which(names(test)=="a")
whc=c("b","c")
lapply(test[whc],function(x){names(x)=test[[nm]];x})
$b
name1 name2 name3
0.1 0.2 0.3
$c
name1 name2 name3
TRUE FALSE TRUE