折叠粘贴列表结构包括转义的引号和R中的c()

时间:2017-07-25 08:42:44

标签: r list paste

请原谅我,如果这是非常基本的,但它让我发疯。

我有一个大型的嵌套列表对象,其中' leaf'元素是字符向量。对此的简单表示是:

dummy <- list(c('A', 'B', 'C'))

我只想将这些项目与管道分隔符粘贴在一起,如下所示:

paste0('Start > ', paste(dummy, collapse='|'), ' > End')

以便我得到输出

Start > A|B|C > End

但我得到的是

[1] "Start > c(\"A\", \"B\", \"C\") > End"

我有所有这些额外的字符和转义引号。我做错了什么?

即使使用recursive = FALSE,我仍然保持使用unlist(),因为这会折叠我的三个字符序列。

2 个答案:

答案 0 :(得分:2)

对于您的示例,这有效:

dummy <- list(c('A', 'B', 'C'))

> sprintf('Start > %s > End',paste0(unlist(dummy),collapse = '|'))
[1] "Start > A|B|C > End"

如果列表中有多个条目,并且您希望将它们全部放在同一个管道中,则可以使用相同的方法:

dummy2 <- list(dummy[[1]],c('D','E','F'))

> sprintf('Start > %s > End',paste0(unlist(dummy2),collapse = '|'))
[1] "Start > A|B|C|D|E|F > End"

或者,如果您想将条目分开,请使用lapply:

> lapply(dummy2, function(x) sprintf('Start > %s > End',paste0(x,collapse = '|')))

[[1]]
[1] "Start > A|B|C > End"

[[2]]
[1] "Start > D|E|F > End"

答案 1 :(得分:0)

如果list中只有一个元素是character向量,则可以尝试rapply

rapply(object = dummy,classes = "character",
            function(t){paste0("Start > ",paste(t,collapse = "|")," > End")})