粘贴混合列表并在字符串上保留引号

时间:2017-06-23 01:45:53

标签: r

这基本上是this question的R等价物。

我有一个混合元素列表:

l = list(-1, "quicksort", NULL)

我想把它变成一个字符串:

string = '-1, "quicksort", NULL'

但我无法弄清楚如何轻松地将引号保留在字符串中而不将所有元素放在引号中:

paste(l, collapse = ", ") # WRONG
# "-1, quicksort, NULL"

paste(shQuote(l), collapse = ", ") # WRONG
# '"-1", "quicksort", "NULL"'

我有一个解决方案,但看起来很笨拙:

paste(lapply(l, function(x) if(class(x) == "character") shQuote(x) else x),
  collapse=", ")
# '-1, "quicksort", NULL'

是否有更简单的(即没有if语句)解决方案?

2 个答案:

答案 0 :(得分:0)

deparse()列表,然后删除不需要的字符。

gsub("list|[()]", "", deparse(l))
# [1] "-1, \"quicksort\", NULL"

答案 1 :(得分:0)

我首选的解决方案是

paste(lapply(l, deparse), collapse = ", ")

绕过了对gsub内容的需求并支持任何类型的列表元素。我认为它也更具可读性。