1

簡単な質問があります。オブジェクトのリストがあります。各オブジェクトにはいくつかのリストがあります。これが複雑になりすぎる前に、例を示しましょう。

x = リスト

x[[1]] = 何らかのオブジェクト

x[[2]] = 別のオブジェクト

...

x[[n]] = 別のオブジェクト

前述したように、各オブジェクトにはさらにいくつかのリストがあります。しかし、私は特定のリストに興味があります。それを「a」と呼びましょう。

x[[1]][[a]] = ('A': 1, 'B': 2, 'C': 3, ..., Z: 26)

Python ライクな構文で申し訳ありません。私は本当に R を学んでいます。とにかく、私がやりたいことは、これらのオブジェクトに保持されているリストを組み合わせて、それらの中央値を取ることです。これをより明確にするために、すべての「A」要素をグループ化し、それらの中央値を取得します。

x[[1]][[a]][['A']]、x[[2]][[a]][['A']]、x[[3]][[a]][ ['A']], ..., x[[n]][[a]][['A']]

同様に、すべての「B」、「C」、...、「Z」要素をグループ化し、それらの中央値を取得したい...

x[[1]][[a]][['Z']]、x[[2]][[a]][['Z']]、x[[3]][[a]][ ['Z']], ..., x[[n]][[a]][['Z']]

それで問題は、これを行うための最良の方法は何ですか?私はこれを理解しようと何時間も費やしました!誰かが私を助けてくれたら最高です。

私が実際に何をしているのかを知りたい場合は、基本的に、ランダム フォレスト オブジェクトのリスト (x) を用意しています。したがって、x[[1]] は最初のランダム フォレスト、x[[100]] は 100 番目のランダム フォレストです。各ランダム フォレストには、たとえば x[[1]][['predicted']] に格納される予測値のリストがあります。各予測リストには、予測値に関連付けられたラベルがあります。私が実際にやろうとしているのは、100 個のランダム フォレストすべてで各ラベルの予測値の中央値を計算することです。そして効率よくやりたい。Python ではこれは簡単ですが、R ではよくわかりません。とにかく、助けてくれてありがとう!!! ほんとうにありがとう。

4

3 に答える 3

0

ここにあなたがそれを行うことができる1つの方法があります. rapplyリスト要素の名前でサブセット化するのに使用できないため、少し難しいです(これはイライラします)。ただし、リストから除外して名前をサブセット化し、medianその方法をとることができます...

# Make some reproducible data
set.seed(1)
l <- list( a = sample(10,3) , b = sample(10,3) , c = sample(10,3) )
ll <- list( l , l , l )

# Unlist - we get a named vector but all a's have unique names - e.g. a1 , a2... an
unl <- unlist(ll)
# a1 a2 a3 b1 b2 b3 c1 c2 c3 a1 a2 a3 b1 b2 b3 c1 c2 c3 a1 a2 a3 b1 b2 b3 c1 c2 c3 
#  3  4  5 10  2  8 10  6  9  3  4  5 10  2  8 10  6  9  3  4  5 10  2  8 10  6  9

# Subset by those elements that contian 'a' in their name
a.unl <- unl[ grepl("a",names(unl)) ]
# a1 a2 a3 a1 a2 a3 a1 a2 a3 
#  3  4  5  3  4  5  3  4  5 

#  Take median
median( a.unl )
# [1] 4

複数の名前をループするには、これを試してください...

sapply( c( "a" , "b" , "c" ) , function(x) median( unl[ grepl(x,names(unl) ) ] ) )
# a b c 
# 4 8 9 
于 2013-09-21T07:04:49.087 に答える
0

A、B、C、... ごとに単純なループでこれを行うことができます。

x <- c()
for( i in 1:n ) x <- c( x, x[[i]][[a]][['A']] )
median(x)
于 2013-09-21T07:05:06.227 に答える
0

最上位リストを作成するためのサンプル データx:

x <- replicate(3, list(a = as.list(setNames(sample(1:100, 26), LETTERS)),
                       b = runif(10)),
               simplify = FALSE)

aまず、各リストから抽出します。

a.only <- lapply(ll, `[[`, "a")

次に、すべての中央値を一度に計算するAZは、次のようにします。

do.call(mapply, c(a.only, FUN = function(...) median(unlist(list(...)))))
#  A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z 
# 55 59 41 21 93 72 65 74 51 42 87 25 60 40 13 77 35 31 92 51 57 37 87 67 29 46 

Aサブリストに必要以上の項目が含まれている場合、C、 、 の中央値のみを計算したい場合はZ、次のようにします。

a.slices <- lapply(a.only, `[`, c("A", "C", "Z"))
do.call(mapply, c(a.slices, FUN = function(...) median(unlist(list(...)))))
#  A  C  Z 
# 55 41 46
于 2013-09-21T11:46:56.140 に答える