このトピックが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がリスト構造を維持しないことです。ヘルプとおそらくいくつかのヒント/説明がいただければ幸いです。
ネストされた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]])
}
}