Лучший способ объединить имя и значение именованного списка в строку - PullRequest
0 голосов
/ 20 ноября 2018

Учитывая именованный список:

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"

Параметр «Свернуть» в «Вставить» кажется таким элегантным и близким, но я не могу понять, можно ли сделать его иерархическим (т. Е. «Сначала сверните имя и значение с помощью« = », затем сверните с« , '):

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

Или

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

Попытка lapply и паста0 производится:

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

Есть ли более простой способ сделать это, или я просто придерживаюсь неуклюжего способа?

1 Ответ

0 голосов
/ 20 ноября 2018

Не уверен, как вы собираетесь использовать это, но мы могли бы создать строку путем объединения 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"
...