【发布时间】: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=TRUE在this 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 的数字?