【问题标题】:A better way to combine name and value of a named list into a string将命名列表的名称和值组合成字符串的更好方法
【发布时间】:2019-04-22 11:49:28
【问题描述】:

给定一个命名列表:

values <- list( a=1, b=2 )

我想生成一个包含名称的逗号分隔字符串:

"a=1,b=2"

以下工作,但看起来非常笨重:

library( iterators )
library( itertools )
fieldnames <- names(values)
sublist <- list()
iter_fieldnames <- ihasNext( iter( fieldnames ) )
iter_values <- ihasNext( iter( values ) )
while( hasNext( iter_fieldnames ) & hasNext( iter_values ) ) {
  sublist <- append( sublist, paste0( nextElem( iter_fieldnames ), "=", nextElem( iter_values ) ) )
}
paste0( sublist, collapse="," )
[1] "a=1,b=2"

'paste' 上的 'collapse' 选项看起来很优雅并且很接近,但我不知道它是否可以分层(即,“首先,使用 '=' 折叠名称和值,然后使用 ' 折叠,'):

paste0( paste0(names(values), values, collapse='='), collapse="," )
[1] "a1=b2"

或者

paste0( paste0( c(names(values), values), collapse='=' ), collapse=',' )
[1] "a=b=1=2"

尝试生成 lapply 和 paste0:

paste0( lapply( values, function(x) paste0( names(x), "=", x ) ), collapse=',' )
[1] "=1,=2" 

有没有更简单的方法可以做到这一点,还是我只是坚持笨拙的方式?

【问题讨论】:

    标签: r string list named


    【解决方案1】:

    不确定您将如何使用它,但我们可以通过将列表的names、“=”和列表元素的实际值连接在一起来创建一个字符串。

    paste0(paste0(names(values), "=", unlist(values)), collapse = ",")
    #[1] "a=1,b=2"
    

    在更大的列表上尝试一下

    values <- list(a=1, b=2, c = 12, d = 5)
    
    paste0(paste0(names(values), "=", unlist(values)), collapse = ",")
    #[1] "a=1,b=2,c=12,d=5"
    

    【讨论】:

      猜你喜欢
      • 2016-04-28
      • 1970-01-01
      • 1970-01-01
      • 2014-05-03
      • 2013-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多