如何便捷合并不同长度的R语言向量?
解决方案
你可以通过以下几种方式将列表形式的结果合并为单一向量:
方法1:使用基础R的unlist()函数
sapply在处理不同长度的返回值时会返回列表,unlist()可以将列表的所有元素按顺序展平为一个单一向量:
set.seed(123) # 先生成分段的列表 vec_list <- sapply(c(5,2,3), function(n) rnorm(n,0,1)) # 展平为单一向量 vec <- unlist(vec_list) # 输出结果 vec
运行后得到的结果就是你需要的形式:
[1] -0.5604756 -0.2301775 1.5587083 0.0705084 0.1292877 1.7150650 0.4609162 -1.2650612 -0.6868529 -0.4456620
方法2:使用tidyverse工具包的flatten_dbl()
如果你习惯使用tidyverse生态,可以用purrr包的flatten_dbl()函数,它会明确将列表转换为数值型向量:
library(purrr) set.seed(123) vec <- sapply(c(5,2,3), function(n) rnorm(n,0,1)) %>% flatten_dbl()
补充说明
当sapply的每个调用返回长度不同的向量时,它无法将结果简化为矩阵或数组,因此默认返回列表。而unlist()或flatten_dbl()的作用就是将列表中嵌套的向量元素按顺序拼接成一个一维向量。
内容的提问来源于stack exchange,提问作者T Richard
相关产品推荐
相关产品推荐

