如何使用lappy删除R中列表中元素的插槽

时间:2012-08-08 17:43:15

标签: r lapply

所以我有一长串的对象,每个对象都有一个我想要删除的插槽。具体而言,它们以重复的方式存储数据。但之所以无所谓。

我的主要问题是什么是“正确”的做法。所以这是设置:

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

2 个答案:

答案 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