有没有办法在我的 lapply() 函数中获取列表索引名称?
n = names(mylist)
lapply(mylist, function(list.elem) { cat("What is the name of this list element?\n" })
我问before是否可以在 lapply() 返回 列表中保留索引名称,但我仍然不知道是否有一种简单的方法来获取自定义函数内的每个元素名称。我想避免对名称本身调用 lapply,我宁愿在函数参数中获取名称。
最佳答案
不幸的是,lapply
只提供传递给它的向量的元素。
通常的解决方法是向其传递向量的名称或索引,而不是向量本身。
但请注意,您始终可以向函数传递额外的参数,因此以下方法有效:
x <- list(a=11,b=12,c=13) # Changed to list to address concerns in commments
lapply(seq_along(x), function(y, n, i) { paste(n[[i]], y[[i]]) }, y=x, n=names(x))
在这里,我在 x
的索引上使用 lapply
,但也传入 x
和 x
的名称>。正如您所看到的,函数参数的顺序可以是任何顺序 - lapply
会将“元素”(此处为索引)传递给第一个参数未指定额外的。在本例中,我指定了 y
和 n
,因此只剩下 i
...
产生以下结果:
[[1]]
[1] "a 11"
[[2]]
[1] "b 12"
[[3]]
[1] "c 13"
更新更简单的示例,相同的结果:
lapply(seq_along(x), function(i) paste(names(x)[[i]], x[[i]]))
这里函数使用“全局”变量x
并提取每次调用中的名称。
关于r - 访问 FUN 内的 lapply 索引名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9950144/