1

これは些細なことだと思いました...

これが私のリストの最初の2つのコンポーネントです:

foo <- structure(list(vv = structure(list(`0` = c("C RR", "G RR", "nil",
"C AA", "G AA", "nil", "C RV", "G RV", "nil", "C VB", "G VB",
"nil", "C RV", "C AA", "G AA", "nil", "G AA", "nil", "C VB",
"G VB", "nil", "C RJ"), `1` = c("G RJ", "nil", "G RJ", "nil",
"G RJ", "C RV", "G RV", "nil", "C AJ", "G AJ", "nil", "C BB",
"G BB", "C BB", "G BB", "nil", "C BV", "G BV", "nil", "C JA",
"G JA", "nil", "C AJ", "G AJ", "C AJ", "G AJ", "nil", "C RJ",
"G RJ", "nil", "C RJ", "G RJ", "nil"), `2` = c("nil", "C JA",
"G JA", "C JR", "G JR", "nil", "C JR", "G JR", "nil", "C BB",
"G BB", "nil", "C VV", "nil", "C AJ", "G AJ", "nil", "C AJ",
"G AJ", "nil", "C AJ", "nil", "C BV", "G BV", "nil", "C BV",
"nil", "C BV", "G BV", "nil"), `3` = c("nil", "C RJ", "G RJ",
"C RJ", "G RJ", "nil", "C JA", "G JA", "nil", "C VR", "G VR",
"nil", "C BV", "G BV", "nil", "C BV", "G BV", "nil", "C AA",
"G AA", "C AA", "G AA", "nil", "C AA", "G AA", "nil", "C AJ",
"G AJ", "nil", "C AJ", "G AJ", "nil", "C JA", "G JA", "nil",
"C JA", "G JA", "nil", "C BV", "nil"), `4` = c("nil", "C VB",
"G VB", "nil", "C VB", "G VB", "nil", "C BV", "G BV", "nil",
"C RJ", "G RJ", "nil", "C RJ", "G RJ", "nil", "C RR", "G RR",
"nil", "C RV", "nil", "C JA", "G JA", "nil", "C AA", "C JA",
"nil", "C RV", "G RV", "nil", "C RV", "nil", "C VV", "C BB",
"G BB", "nil", "C RV", "G RV", "nil", "C VB", "nil", "C JA",
"G JA", "nil", "C BB", "nil", "C RR", "nil", "C RR", "nil", "C JA",
"nil", "C RR", "nil", "C RR", "nil", "C JA", "nil"), `5` = c("nil",
"C BB", "G BB", "nil", "C RR", "nil", "C VB", "nil", "C AA",
"nil", "C VB", "nil", "C VB", "nil", "C VB", "nil", "C VB", "nil",
"C VB", "nil", "C JA", "nil", "C VB", "G VB", "nil", "C AJ",
"nil", "C VB", "C BB", "nil", "C AJ", "G AJ", "nil", "C RR",
"nil", "C AJ", "nil", "C AJ", "nil", "C JA", "G JA", "nil"),
    `6` = c("nil", "C BB", "nil", "C AA", "nil", "C AA", "nil",
    "C AA", "nil", "C RR", "nil", "C VB", "G VB", "C RV", "G RV",
    "nil", "C VB", "G VB", "nil", "C BB", "nil", "C BB", "nil",
    "C BV", "nil", "C RV", "nil", "C BV", "nil", "C BV", "nil",
    "C JA", "nil")), .Names = c("0", "1", "2", "3", "4", "5",
"6")), rv = structure(list(`0` = c("nil", "C VB", "G VB", "nil",
"G VB", "nil", "C RR", "G RR", "nil", "C RV", "C AA", "G AA",
"nil", "G RR", "C RR", "G RR", "C RR", "G RR"), `1` = c("nil",
"C RV", "G RV", "C RV", "G RV", "nil", "G JR", "nil", "C AJ",
"G AJ", "C AJ", "G AJ", "C AJ", "G AJ", "nil", "C AJ", "nil",
"C JA", "G JA", "C RV", "G RV", "C RV", "G RV", "C RV", "G RV",
"nil"), `2` = c("nil", "C JR", "G JR", "nil", "C BB", "G BB",
"nil", "C BV", "G BV", "nil", "C VV", "G VV", "C VV", "G VV",
"nil"), `3` = c("nil", "C AA", "G AA", "C AA", "G AA", "nil",
"C JA", "nil", "C BV", "G BV", "C BV", "G BV", "nil", "C BV",
"G BV", "nil", "C RJ", "G RJ"), `4` = c("nil", "C VV", "G VV",
"nil", "C VR", "G VR", "nil", "C RJ", "G RJ", "C RJ", "G RJ",
"nil", "C VB", "G VB", "nil", "C JA", "G JA", "C JA", "G JA",
"nil", "C VB", "G VB", "C VB", "G VB"), `5` = c("nil", "C RR",
"G RR", "nil", "C BB", "G BB", "nil", "G BB", "nil", "C JA",
"G JA", "nil"), `6` = c("nil", "C BV", "G BV", "nil", "G BV",
"nil", "C RJ", "nil", "C BB", "nil", "C BB", "nil", "C AJ", "nil",
"C BB", "G BB", "nil", "C RV", "nil")), .Names = c("0", "1",
"2", "3", "4", "5", "6"))), .Names = c("vv", "rv"), class = "data.frame", row.names = c(NA,
-7L))

特定のコンポーネントにマッピングできます:

 > mapply(function(x) sum(substr(x,1,1)=="C"),foo[[1]])
 0  1  2  3  4  5  6
 8 10 11 14 24 19 15

また

> mapply(function(x) sum(substr(x,1,1)=="C"),foo[[2]])
 0  1  2  3  4  5  6
 6 10  5  7  9  3  7

これは期待される出力です。しかし、この関数をリストのすべてのコンポーネントに適用するにはどうすればよいですか?私はこれに対する解決策を見つけることができないようです。すべてのコンポーネントを一度にマッピングする方法がないように思われる理由がわかりません。たぶん私のリストは異なって構成されている可能性がありますか?このリストは奇妙に思えますが、その中の情報は正しいです。

理想的には、期待される出力は、次のようなコンポーネントの名前を持つマトリックスになります。

structure(c(8L, 10L, 11L, 14L, 24L, 19L, 15L, 6L, 10L, 5L, 7L,
9L, 3L, 7L), .Dim = c(7L, 2L), .Dimnames = list(c("0", "1", "2",
"3", "4", "5", "6"), c("vv", "rv")))
4

1 に答える 1

2

もうすぐです。

FUN <- function(x) sum(substr(x,1,1)=="C")
sapply(foo,function(x) mapply(FUN,x))

  vv rv
0  8  6
1 10 10
2 11  5
3 14  7
4 24  9
5 19  3
6 15  7

原則としてはうまくいくと思いますsapply(foo,mapply,FUN=FUN)が、うまくいきません(引数の評価には少し賢すぎます)。

于 2012-10-19T14:12:43.457 に答える