我不推荐它,但你可以这样做: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)