r - 如何动态命名列表的元素?
问题描述
我想用变量的内容动态命名列表的元素,我该怎么做?
DT <- data.table(A=LETTERS[1:3], B=letters[1:3], C= 1:9)
lapply(unique(DT$A), function(xA){
RTN <-
lapply(unique(DT$B), function(xB){
output <- DT[A == xA & B == xB]$C
if(length(output)== 0L) {
}else{
c(xA, xB, output)
}
})
})
结果是
[[1]]
[[1]][[1]]
[1] "A" "a" "1" "4" "7"
[[1]][[2]]
NULL
[[1]][[3]]
NULL
[[2]]
[[2]][[1]]
NULL
[[2]][[2]]
[1] "B" "b" "2" "5" "8"
[[2]][[3]]
NULL
我想做如下
[[A]]
[[A]][[a]]
[1] "A" "a" "1" "4" "7"
[[A]][[b]]
NULL
[[A]][[c]]
NULL
[[B]]
[[B]][[a]]
NULL
[[B]][[B]]
[1] "B" "b" "2" "5" "8"
[[B]][[c]]
NULL
此外,我怎样才能删除 NULL,并使其成为一个完整的案例矩阵?非常感谢。
解决方案
这里有两个解决方案:
1) 使用 sapply 并设置USE.NAMES = TRUE
2)在每个 lapply 之前捕获名称并在之后设置它们。
DT <- data.table(A=LETTERS[1:3], B=letters[1:3], C= 1:9)
outer_list_names <- unique(DT$A)
outer_list <- lapply(unique(DT$A), function(xA){
RTN_names = unique(DT$B)
RTN <-
lapply(unique(DT$B), function(xB){
output <- DT[A == xA & B == xB]$C
if(length(output)== 0L) {
}else{
c(xA, xB, output)
}
})
names(RTN) <- RTN_names
})
names(outer_list) <- outer_list_names
outer_list
推荐阅读
- php - php 检查数组中的特定值是否包含大于 0 的值
- zsh - 我如何确定为什么这个 `test` 与 tmux 的 session_name 不匹配?
- c# - 将 SQL 查询转换为 linq lambda Entity Framework Core
- postgresql - 聚合函数作为元组参数 postgres
- python - 你如何比较字典和列表
- websphere - 如何在项目的资产类型中添加笔记本?
- javascript - 有没有办法使用 javascript 将样式应用于突出显示的文本?
- google-apps-script - 如何从谷歌脚本向 BigQuery 发出正确的 HTTP 请求
- java - Spring Boot 2.x Servlet Path 在测试中被忽略
- php - 在 Lumen 7 中验证时如何返回自定义 JSON 数组名称和内部元素?