簡體   English   中英

合並命名向量列表而無需修改名稱

[英]Combining a list of named vectors without mangling the names

如何合並命名向量列表? 我需要拆分一個整數矢量(名稱中包含字符),以便與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 

在不改變的“文本”結構的一種選擇是改變名稱vectorunlist(text)用) names onjects的內部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 

或者,如果可以刪除“文本”對象的名稱,請將“文本”的名稱設置為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 

您可以先刪除列表元素的名稱,然后再進行復合命名。

> 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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM