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(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 に答える