折叠粘贴列表结构包括 R 中的转义引号和 c()
Collapse pasting a list structure includes escaped quotes and c() in R
如果这是非常基本的,请原谅我,但它让我发疯。
我有一个很大的嵌套列表对象,其中 '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(),因为这会使我的三个字符序列崩溃。
对于您的示例,这有效:
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"
如果您的 list
中只有一个元素是如图所示的 character
矢量,那么您可以尝试 rapply
。
rapply(object = dummy,classes = "character",
function(t){paste0("Start > ",paste(t,collapse = "|")," > End")})
如果这是非常基本的,请原谅我,但它让我发疯。
我有一个很大的嵌套列表对象,其中 '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(),因为这会使我的三个字符序列崩溃。
对于您的示例,这有效:
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"
如果您的 list
中只有一个元素是如图所示的 character
矢量,那么您可以尝试 rapply
。
rapply(object = dummy,classes = "character",
function(t){paste0("Start > ",paste(t,collapse = "|")," > End")})