R 中使用名称/值对简化列表

Yur*_*nko 2 r list tidyverse rlang

我有一个列表列表,每个列表的格式如下:

list( name = 'foo',
       type = 'bar',
       attributes= list(
         list(name='color', value='blue'  ),
         list(name='batch', value=123),
         list(name='is_available', value='true')  )
       )
Run Code Online (Sandbox Code Playgroud)

即具有属性的名称和值对。我如何将其转换为这种格式

list( name = 'foo',
       type = 'bar',
       attributes= list(
         color='blue' ,
         batch=123,
         is_available=TRUE )
)
Run Code Online (Sandbox Code Playgroud)

最好以某种tidyverse方式。

Rui*_*das 5

这是一种单行基本 R 方式。与预期输出的唯一区别在于属性is_available,请参见末尾。

lst <- list( name = 'foo',
             type = 'bar',
             attributes= list(
               list(name='color', value='blue'  ),
               list(name='batch', value=123),
               list(name='is_available', value = 'true')  )
)
out <- list( name = 'foo',
             type = 'bar',
             attributes= list(
               color='blue' ,
               batch=123,
               is_available = TRUE )
             )

lst$attributes <- sapply(lst$attributes, \(x) setNames(x[2], x[1]))

lst$attributes$is_available
#> [1] "true"
out$attributes$is_available
#> [1] TRUE
Run Code Online (Sandbox Code Playgroud)

创建于 2023-05-27,使用reprex v2.0.2