Mat*_*ert 3 attributes r lapply
或者说它更通用:如何在列表元素中添加多个属性?
我试图将属性设置为列表的所有元素data.frames.最后,我想names(myList)为每个data.frame内部添加一个变化的属性.但我甚至无法获得所有列表元素的静态属性.
lapply(myList,attr,which="myname") <- "myStaticName"
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为lapply不起作用lapply<-.如果我至少知道如何做到这一点,也许我可以弄清楚如何使用不同的属性,如列表的名称来做到这一点.
我不推荐它,但你可以这样做:lapply(myList, 'attr<-', which='myname', value='myStaticName').旧式for循环可能是执行此任务的最清晰方式 - 或者在创建对象时在上游执行此分配.
for (i in seq_along(myList)) attr(myList[[i]], 'myname') <- 'myStaticName'
Run Code Online (Sandbox Code Playgroud)
编辑:
正如@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)
Run Code Online (Sandbox Code Playgroud)
