组合一个命名向量列表而不破坏名称

时间:2015-12-31 03:05:21

标签: r

如何组合命名向量列表?我需要拆分一个整数向量(带有名称的字符)以便与parallel::parSapply()一起使用,然后再将它们组合起来。示例代码:

text <- 1:26
names(text) <- letters
n <- 4
text <- split(text, cut(1:length(text),breaks=n,labels=1:n))
# text <- parSapply(..., text, ...) would go here in the actual code

但是,当我使用unlist将数据转换回命名向量时,名称会被破坏:

> unlist(text)
1.a 1.b 1.c 1.d 1.e 1.f 1.g 2.h 2.i 2.j 2.k 2.l 2.m 3.n 3.o 3.p 3.q 3.r 3.s 4.t 4.u 4.v 
  1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22 
4.w 4.x 4.y 4.z 
 23  24  25  26 

我正在寻找的是以下结果(除了它应该与 n 的任何值一起使用):

> c(text[[1]],text[[2]],text[[3]],text[[4]])
 a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z 
 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 

2 个答案:

答案 0 :(得分:3)

在不更改“文字”结构的情况下,一个选项是更改vectorunlist(text))的名称,其中包含names元素中list个项目的名称

setNames(unlist(text), unlist(sapply(text, names)))
#  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z 
#  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 

或者,如果可以删除“text”对象的名称,请将“text”的名称设置为NULL,然后设置unlist

unlist(setNames(text, NULL))
#  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z 
# 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 

答案 1 :(得分:2)

您可以先删除列表元素名称,然后不会发生复合命名。

> names(text) <- NULL
> do.call(c, text)
 a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z 
 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

相同
> unlist(text)
 a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z 
 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 

或者@RichardScriven在评论中指出,您可以在不删除源变量中的名称的情况下执行以下操作:do.call("c", c(text, use.names = FALSE))