从 data.table 返回一个列表

标签 r list data.table

如何从data.table返回list?问题是,每当我在 j 部分返回 list 时,它就会按设计转换为 data.table 格式?

假设我想返回一个 list ,其元素名为(!)长度为 1 的向量,即:

expected_result <- list(A = c(a = 1), B = c(b = 2), C = c(c = 3))  

这确实有效,但是用两个列表来提取第一个元素感觉有点黑客。

那么规范的方式是什么?

library(data.table)
library(magrittr)

d <- data.table(id = LETTERS[1:3],
                nm = letters[1:3],
                val = 1:3)

d[, .(.(setNames(val, nm) %>%
           split(seq_along(.)) %>%
           setNames(id)))]$V1[[1]] %>%
   all.equal(expected_result)
# [1] TRUE

编辑

@akrun 提供了一个很好的非 data.table 解决方案,但我宁愿找到一个使用 [.data.table 语法的解决方案。

最佳答案

最简单的方法是使用 with分割使用“id”创建的命名向量(带有“val”和“nm”列)

with(d, split(setNames(val, nm), id))

-输出

#$A
#a 
#1 

#$B
#b 
#2 

#$C
#c 
#3 

或者,如果我们想在 data.table 中创建 list,它有点复杂,如 data.table/data.frame 列是长度相等的 list 元素。因此,我们可能需要unclass属性或将其包装在嵌套的list中,然后展平list元素

do.call(c, d[, .(list(split(setNames(val, nm), id)))]$V1)
#$A
#a 
#1 

#$B
#b 
#2 

#$C
#c 
#3 

关于从 data.table 返回一个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65722520/

相关文章:

r - R可以将纬度和经度点合并到空间多边形中的区域吗?

regex - R:删除 '$' 符号

r - 在 R 中可视化强连接组件

python - 计算 2 个列表之间的重复项

python - 如何判断 python 列表中的项目是否按顺序出现

r - 使用列的分类值删除R中的索引

java - 从通用 "Object"列表创建自定义对象列表会导致 ClassCastException

r - 当在 data.table 中链接时,autoplot 将空白图保存到 png 设备

r - 在两个 data.tables 中添加值

rbindlist data.frames 的列表列并选择唯一值