R中的折叠式清单

一月

假设我有一个清单

lst <- list(c("A1", "A1", "A1", "A1", "A1", "A1"), 
            c("", "R1", "R2", "R2", "R2", "R2"),
            c("", "", "", "U1", "U2", "U3"))

输出在哪里

[[1]]
[1] "A1" "A1" "A1" "A1" "A1" "A1"

[[2]]
[1] ""   "R1" "R2" "R2" "R2" "R2"

[[3]]
[1] ""   ""   ""   "U1" "U2" "U3"


现在,我想有一个向量,其元素像这样组合

out <- paste0(lst[[1]], lst[[2]], lst[[3]])

输出将在哪里

[1] "A1"     "A1R1"   "A1R2"   "A1R2U1" "A1R2U2" "A1R2U3"

如何才能更动态地执行此操作(例如,对于较长/较短的列表)?我试图使用sapply等等,但无济于事。

弗里克先生

你可以做到这一点

do.call("paste0", lst)
# [1] "A1"     "A1R1"   "A1R2"   "A1R2U1" "A1R2U2" "A1R2U3"

这会将lstas的所有列都传递给,paste0因此基本上就像

paste0(list[[1]], list[[2]], list[[3]])

但不管您有多少个向量 lst

在基数R中,do.call()与Python拥有的“ splat”类型运算符差不多。rlang软件包为bang-bang-bang运算符引入了另一种选择。但是您必须构建表达式并对其进行显式求值。

library(rlang)
eval_tidy(expr(paste0(!!!lst)))
# [1] "A1"     "A1R1"   "A1R2"   "A1R2U1" "A1R2U2" "A1R2U3"

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章