【问题标题】:Creating list in one line from variables with distinct names and values in R从R中具有不同名称和值的变量在一行中创建列表
【发布时间】:2018-12-22 00:59:45
【问题描述】:

这是我在这个论坛上的第一个问题,所以我希望我遵循所有正确的程序。

我想知道是否可以在 R 中从一组具有不同名称和值的变量在一行中创建一个列表。具体来说,我已经有一个列表list_cond <- list("foo1", "foo2", "foo3",...) 和一个列表列表list_vals <- list(list(1, 2, 3), list(4, 5, 6), list(7, 8, 9)),并希望在程序上创建一个列表new_list <- list(f("foo1")=2, f("foo2")=5, f("foo3")=8),其中字符串修改函数f 在使用之前应用于list_cond 的每个元素作为从list_vals 索引的相应元素的名称。有没有办法在一行中做到这一点?

我通过使用USE.NAMES=TRUEthis thread中找到了sapply作为方法,但它似乎只从传入的函数生成名称,并且值与名称相同。 This thread 也是相关的,但我特别想在同一行中生成名称和值,而不仅仅是为值添加名称。

如果无法在一行中执行此操作,是否有任何特定方法有效,而不是仅创建列表并使用一些apply 函数稍后添加名称?

编辑:因为这将在没有很多 R 包的特定服务器上运行,所以内置函数会更好

【问题讨论】:

  • 你需要map(list_vals, ~ set_names(.x, unlist(list_cond)))
  • 我无法测试它,因为我在没有很多库的服务器上运行 R。我更新了我的帖子,把这个细节放进去。有没有办法用内置的 R 函数来做到这一点?
  • 根据预期的输出,您是否只提取第二个元素
  • 如果是这样的话map(list_vals, pluck, 2) %>% set_names(paste0(unlist(list_cond), "_", seq_along(list_vals)))或者base RsetNames(lapply(list_vals, '[[', 2), paste0(unlist(list_cond), "_", seq_along(list_vals)))
  • 您的 new_list 名称似乎违反直觉。为什么1_1 每个嵌套元素中的第二个元素的后缀模式?第三个名字是否缺少 foo3_3 的数字?

标签: r list


【解决方案1】:

我们提取list的第二个元素,然后将list的名称设置为'list_cond'(是list所以unlist它创建了vector

setNames(lapply(list_vals, '[[', 2), 
          paste0(unlist(list_cond), "_", seq_along(list_vals)))

tidyverse 方法是

library(tidyverse)
map(list_vals, pluck, 2) %>% 
     set_names(paste0(unlist(list_cond), "_", seq_along(list_vals)))

数据

list_cond <- list("foo1", "foo2", "foo3")
list_vals <- list(list(1, 2, 3), list(4, 5, 6), list(7, 8, 9))

【讨论】:

    猜你喜欢
    • 2020-09-29
    • 2020-04-18
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    • 2020-08-06
    • 1970-01-01
    相关资源
    最近更新 更多