2011-03-14 1 views
1

可能なすべての行列(またはdata.frames)を、元の行列(またはdata.frame)元の行列(またはdata.frame)よりも少ない列を持つすべての可能な行列(またはdata.frames)を取得する方法

例えば、私は行列(またはdata.frame)を持って言うことができますtmp

structure(list(V1 = 1:5, V2 = 6:10, V3 = 11:15, V4 = 16:20, V5 = 21:25), 
.Names = c("V1", "V2", "V3", "V4", "V5"), row.names = c(NA, -5L), 
class = "data.frame") 

はどうすれば効率的に得ることができます:[ - 1] TMP、TMPを[ 、-2]、tmp [、-3]、tmp [、-4]、tmp [、-5]

私は考えることができます

llply(list(1,2,3,4,5), function(x) {tmp[[x]] <- NULL; tmp}) 

lapplyを使用することもできます。 tmpが行列の場合(特にas.data.frame(tmp)を実行しない場合)、これを行う方法がより分かりやすく、より直感的で効率的ですか?

ご協力いただきありがとうございます。

答えて

4

なぜ両方行列やデータフレームのためだけではなく

lapply(1:ncol(tmp),function(i)tmp[,-i]) 

作品。

あなたはそれをより直観的に行う方法がわかりません。

3

あなたは、単純なインデックスとlapplyでそれを行うことができます。

R> tmp <- matrix(1:10000,nrow=100,ncol=100) 
R> lapply(1:ncol(tmp), function(i) {tmp[,-i]}) 

はたぶん、より効率的なソリューションがありますが、私はこの方法の主な問題点は、元の行列がの大きな数を持っている場合ということだと思い(n)、lapply関数の結果は膨大になります(n-1行列のリストになります)。

関連する問題