【问题标题】:Using the names of the objects being iterated upon in lapply在 lapply 中使用被迭代的对象的名称
【发布时间】:2014-04-25 15:45:51
【问题描述】:

我想访问作为 lapply 输入的列表中对象元素的名称。以下是预期行为的人为示例,我将在其中粘贴对象的名称及其内容:

x <- list(a=1,b=2)
lapply(x, FUN) 
$a
[1] "a1"

$b
[1] "a2"

总是可以在列表名称上使用lapply(),然后在函数体中使用x[[name_element]],但我认为这会使代码不太清晰。

【问题讨论】:

  • 由于它的构造方式,lapply() 永远无法访问它当前正在操作的列表元素的名称。这意味着,如果您想以这种方式使用lapply(),我认为您只需要硬着头皮使用名称来索引元素。

标签: r lapply


【解决方案1】:

mapply上方列表和列表名称:

x <- list(a = 1, b = 2)
y <- mapply(paste0, names(x), c(x), SIMPLIFY = FALSE)

y
$a
[1] "a1"

$b
[1] "b2"

【讨论】:

  • 恐怕你错过了我说“人为的例子”的部分。重点不是解决这个简单的玩具问题,而是解决一般问题,你确实需要 lapply。
  • 明白了。那么我相信mapply 就是答案。
【解决方案2】:

不是 100% 你的一般问题是什么,但这是玩具问题的另一种解决方案。

fun <- function(x) {
  lapply(x, function(elem) paste0(names(x)[[elem]], x[[elem]]))
}

fun(x)
$a
[1] "a1"

$b
[1] "b2"

【讨论】:

    猜你喜欢
    • 2013-02-19
    • 2020-06-05
    • 2019-11-18
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 2021-12-18
    • 2017-11-27
    • 1970-01-01
    相关资源
    最近更新 更多