r - 将命名向量转换为 R 中的列表

标签 r vector

假设我有以下命名的数字向量:

a <- 1:8
names(a) <- rep(c('I', 'II'), each = 4)

如何将此向量转换为长度为 2 的列表(如下所示)?
a.list
# $I
# [1] 1 2 3 4
# $II
# [1] 5 6 7 8

请注意 as.list(a)不是我要找的。
我非常不满意(对于大向量来说很慢)的解决方案是:
names.uniq <- unique(names(a))
a.list <- setNames(vector('list', length(names.uniq)), names.uniq)
for(i in 1:length(names.uniq)) {
  names.i <- names.uniq[i]
  a.i <- a[names(a)==names.i]
  a.list[[names.i]] <- unname(a.i)
}

预先感谢您的帮助,
德文

最佳答案

就像我在评论中所说的那样,您可以使用 split创建一个列表。

a.list <- split(a, names(a))
a.list <- lapply(a.list, unname)

单线将是
a.list <- lapply(split(a, names(a)), unname)
#$I
#[1] 1 2 3 4
#
#$II
#[1] 5 6 7 8

编辑。
然后,thelatemail 在他的评论中发布了对此的简化。我已经使用 Devin King 的方式对它计时,它不仅更简单,而且速度提高了 25%。
a.list <- split(unname(a),names(a))

关于r - 将命名向量转换为 R 中的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46251725/

相关文章:

r - 选择输入以填充 Shiny 中的文本框

c - 使用MACRO摇动排序

c++ - 迭代 vector 返回相同的对象

c++ - std::vector 作为 MPI 非阻塞函数的输入缓冲区

c++ - 十进制乘法器中的错误

r - 使用条件求 R 中的累积和

r - 逐行跟踪完整级别的变化

r - 在 Shiny 中改变井板的高度

c++ - std::vector 每次使用时都填充相同的数据

r - 使用 XGB 模型对新部署数据进行评分