一尘不染

在 lapply 函数中访问和保留列表名称

javascript

我需要访问 lapply 函数中的列表名称。我在网上找到了一些线程,据说我应该遍历列表的名称,以便能够在我的函数中获取每个列表元素名称:

> n = names(mylist)
> mynewlist = lapply(n, function(nameindex, mylist) { return(mylist[[nameindex]]) }, mylist)
> names(mynewlist)
NULL
> names(mynewlist) = n

问题是 mynewlist 丢失了原始的 mylist 索引,我必须添加 last names() 分配来恢复它们。

有没有办法为 lapply 函数返回的每个元素提供一个明确的索引名称?或者另一种方法来确保 mynewlist 元素设置了正确的索引名称?如果 lapply 不以与 mylist 相同的顺序返回列表元素,我觉得 mynewlist 索引名称可能是错误的。


阅读 104

收藏
2022-07-02

共1个答案

一尘不染

我相信lapply默认情况下会保留您正在迭代的任何内容的名称属性。当您存储 in 的名称时myListn该向量不再具有任何“名称”。因此,如果您将其添加回通过,

names(n) <- names(myList)

lapply以前一样使用,你应该得到想要的结果。

编辑

今天早上我的大脑有点模糊。这是另一个可能更方便的选项:

sapply(n,FUN = ...,simplify = FALSE,USE.NAMES = TRUE)

我一直在摸索,很困惑,lapply没有USE.NAMES争论,然后我实际上查看了代码sapply并意识到我很傻,这可能是一个更好的方法。

2022-07-02