或者更笼统地说:如何向列表元素添加多个属性?

我一直试图为列表的元素设置一个属性,所有这些元素都是 data.frames 。最后,我想将 names(myList) 作为可变属性添加到每个 data.frame 里面。但我什至无法获得所有列表元素的静态属性。

lapply(myList,attr,which="myname") <- "myStaticName"

这不起作用,因为 lapply 不适用于 lapply<- 。如果我至少知道如何执行此操作,也许我可以弄清楚如何使用不同的属性(例如列表名称)来执行此操作。

最佳答案

我不推荐它,但你可以这样做: lapply(myList, 'attr<-', which='myname', value='myStaticName') 。老式的 for 循环可能是执行此任务的最清晰方法——或者在创建对象时在上游执行此分配。

for (i in seq_along(myList)) attr(myList[[i]], 'myname') <- 'myStaticName'

编辑:

正如@mnel 在评论中指出的那样,setattr 包中的 data.table 也是一个有效的选项,因为它是通过引用分配的。

编辑:@mnel - 不要将 setattr 与 lapply 一起使用。这是 for 循环更快的一种情况。
library(microbenchmark)
library(data.table)
myList <- as.list(1:10000)

`lapply.attr<-` <-
    function()
    lapply(myList, 'attr<-', which='myname', value='myStaticName')

`for.attr<-` <-
    function()
    for (i in seq_along(myList))
        attr(myList[[i]], 'myname') <- 'myStaticName'

lapply.setattr <-
  function()
  lapply(myList, setattr, name='myname', value='myStaticName')

for.setattr <- function()
  for (i in seq_along(myList))
  setattr(myList[[i]], name = 'myname', value = 'myStaticName')

result <- microbenchmark(`lapply.attr<-`(), `for.attr<-`(), lapply.setattr(), for.setattr())
plot(result)

关于r - 如何将 attr<- 与 lapply 一起使用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13614399/

10-12 13:57