シャッフルしたい列だけを入れ替える
n1<-3 # 行 n2<-4 # 列 # これがデータレコード行列 M<-matrix(sample(1:(n1*n2)),n1,n2) # シャッフル用の行列(行列のベクトル番地を値とする行列) sM<-matrix(1:length(M),nrow(M),ncol(M)) # シャッフルしたい行 tobeshuffled<-2:4 # シャッフルしたい行だけ、シャッフルする sM<-apply(sM[,tobeshuffled],2,sample) # シャッフルしたくない行はシャッフルせず、シャッフルしたい行はシャッフルしたベクトル番地行列 sM2<-M # 番地行列を使って入れ替える sM2[,tobeshuffled]<-matrix(M[sM],n1,length(tobeshuffled)) sM2
- 関数化
n1<-3 n2<-4 M<-matrix(sample(1:(n1*n2)),n1,n2) # Mの列sをシャッフルして返す ShuffleForPerm<-function(M,s=NULL){ if(is.null(s)){ s<-2:length(M[1,]) } sM<-matrix(1:length(M),nrow(M),ncol(M)) sM<-apply(sM[,s],2,sample) sM2<-M sM2[,s]<-matrix(M[c(sM)],nrow(M),length(s)) sM2 } ShuffleForPerm(M,s=2:4)