或者更笼统地说:如何向列表元素添加多个属性?
我一直试图为列表的元素设置一个属性,所有这些元素都是 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/