有没有办法在我的 lapply() 函数中获取列表索引名称?
n = names(mylist) lapply(mylist, function(list.elem) { cat("What is the name of this list element?\n" })
我之前问过是否可以在 lapply() 返回 的列表中保留索引名称,但我仍然不知道是否有一种简单的方法可以在自定义函数中获取每个元素名称。我想避免在名称本身上调用 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))
在这里,我使用lapply了 的索引x,但也传入了x的名称x。正如你所看到的,函数参数的顺序可以是任何东西——lapply将“元素”(这里是索引)传递给额外参数中 未指定的第一个参数。 在这种情况下,我指定yand n,所以只剩i下…
x
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并在每次调用中提取名称。