0

var1 [i]とunion(var2 [1]、...、var2 [i])の共通部分を数えたい。

このデータの使用

var1 <- list('2003' = 1:3, '2004' = c(4:3), '2005' = c(6,4,1), '2006' = 1:4 )
var2 <- list('2003' = 1:3, '2004' = c(4:5), '2005' = c(2,3,6), '2006' = 2:3 )

結果リストに次のものを入力したいと思います。

 1. intersect(var1$2003,var2$2003)
 2. intersect(var1$2004,union(var2$2003,var2$2004))
 3. intersect(var1$2005,union(var2$2005(union(var2$2003,var2$2004))))

など、2012年まで(例には示されていません)

  • 免責事項:編集のため、以下のコメントは意味をなさない場合があります。
4

1 に答える 1

3

このようなものが欲しいですか?

# create the data
var1 <- list('2003' = 1:3, '2004' = c(4:3), '2005' = c(6,4,1), '2006' = 1:4 )
var2 <- list('2003' = 1:3, '2004' = c(4:5), '2005' = c(2,3,6), '2006' = 2:3 )

# A couple of nested lapply statements

lapply(setNames(seq_along(var1), names(var1)), 
   function(i,l1,l2) length(intersect(l1[[i]], Reduce(union,l2[1:i]))), 
  l1 = var1,l2=var2)

$`2003`
[1] 3

$`2004`
[1] 2

$`2005`
[1] 3

$`2006`
[1] 4

を使用して要素を連続して結合することReduce(union,var2)により、リストを減らすことに注意してください(を参照) 。var2union?Reduce

Reduce(union,var2)

[1] 1 2 3 4 5 6

エレガントな代替案を編集する

accumulate = Tの引数を使用しますReduce

lapply(mapply(intersect,var1, Reduce(union, var2, accumulate=T)),length)

なぜなら -

Reduce(union, var2, accumulate = T)

## [[1]]
## [1] 1 2 3
##
## [[2]]
## [1] 1 2 3 4 5
## 
## [[3]]
## [1] 1 2 3 4 5 6
## 
## [[4]]
## [1] 1 2 3 4 5 6
于 2012-08-31T05:41:19.720 に答える