6

所以我有一长串对象,每个对象都有一个我想删除的插槽。具体来说,他们以重复的方式存储数据。但原因应该不重要。

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

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
4

2 回答 2

7

你在 lapply 中的函数没有返回任何东西,所以它默认返回你的赋值结果。您需要返回修改后的对象才能使您的版本正常工作

SampleList <- lapply(SampleList, function(x){x$useless <- NULL; x})
于 2012-08-08T17:53:28.290 回答
1

试试这个简单的lapply版本

SampleList <- lapply(1:3, function(x, i) x[[i]]$useful,  x=SampleList)

甚至是比上一个更简单的这个

lapply(SampleList, function(x) x$useful)

两条指令都只选择useful元素。而不是用这个调用替换无用的,NULL只需选择那些是useful.

于 2012-08-08T17:51:23.670 回答