web-dev-qa-db-ja.com

リストのリストのラッププライ関数/ループR

このトピックがSO=に何度か登場したことは知っていますが、例はより複雑であることが多く、この単純な状況に対する答え(または可能な解決策のセット)が欲しいです。私はまだRとプログラミング全般に頭を抱えているので、ここでは、lapply関数またはベクターの3つのリストのリストであるdata listへの単純なループを使用します。

_data1 <- list(rnorm(100),rnorm(100),rnorm(100))
data2 <- list(rnorm(100),rnorm(100),rnorm(100))
data3 <- list(rnorm(100),rnorm(100),rnorm(100))

data <- list(data1,data2,data3)
_

ここで、各ベクトルの平均のリストを取得します。結果は3つの要素(リスト)のリストになります。

ベクトルのリストの結果のリストを取得する方法と

_for (i in 1:length(data1)){
        means <- lapply(data1,mean)
}
_

または:

lapply(data1,mean)

rapplyを使用してすべての手段を取得する方法を知っています。

rapply(data,mean)

問題は、rapplyがリスト構造を維持しないことです。ヘルプとおそらくいくつかのヒント/説明がいただければ幸いです。

18
MIH

ネストされたlapply/sapplyでリストのリストをループできます

 lapply(data, sapply, mean)

それ以外の場合は

 lapply(data, function(x) sapply(x, mean))

または、list構造の出力が必要な場合は、ネストされたlapplyを使用できます

 lapply(data, lapply, mean)

または、rapplyを使用すると、引数howを使用して、必要な出力の種類を取得できます。

  rapply(data, mean, how='list')

forループを使用している場合は、結果を格納するオブジェクトを作成する必要がある場合があります。

  res <- vector('list', length(data))
  for(i in seq_along(data)){
    for(j in seq_along(data[[i]])){
      res[[i]][[j]] <- mean(data[[i]][[j]])
    }
   }
48
akrun