所以我有一长串的对象,每个对象都有一个我想要删除的插槽。具体而言,它们以重复的方式存储数据。但之所以无所谓。
我的主要问题是什么是“正确”的做法。所以这是设置:
q <- list()
q$useless <- rnorm(100)
q$useful <- rnorm(100)
SampleList <- list(q,q,q)
所以我有一个相同对象的列表(或至少相同的外观对象)。我想删除无用的插槽。为什么,因为它对我没用。
我可以使用循环:
for (i in 1:length(SampleList)){
SampleList[[i]]$useless <- NULL
}
但为什么lapply()版本不起作用。所以猜测问题是我没有得到什么关于lapply。
lapply(SampleList, function(x){print(x$useless) })
SampleList<- lapply(SampleList, function(x){x$useless <- NULL }) #NO WORK
答案 0 :(得分:7)
lapply中的函数没有返回任何内容,因此默认返回作业的结果。您需要返回修改后的对象才能使您的版本正常工作
SampleList <- lapply(SampleList, function(x){x$useless <- NULL; x})
答案 1 :(得分:1)
试试这个简单的lapply
版本
SampleList <- lapply(1:3, function(x, i) x[[i]]$useful, x=SampleList)
甚至这个比前一个更简单
lapply(SampleList, function(x) x$useful)
两条指令仅选择useful
个元素。而不是通过NULL
此次调用替换无用的,只需选择useful
。