1

追加するベクトルがあり、これがコードです。nrow が大きいためにかなり遅いコードです。

私が望むのはスピードアップだけです。c() と append() を試しましたが、どちらも十分に高速ではないようです。そして、Rのベクトルまたはリストに要素を効率的に追加または削除しますか?

コードは次のとおりです。

compare<-vector()

for (i in 1:nrow(domin)){

  for (j in 1:nrow(domin)){
      a=0
    if ((domin[i,]$GPA>domin[j,]$GPA) & (domin[i,]$SAT>domin[j,]$SAT)){
      a=1  
    }
    compare<-c(compare,a)
  }
  print(i)
}

を使用すると、比較のインデックスを把握するのが難しいことがわかりました

   #compare<-rep(0,times=nrow(opt_predict)*nrow(opt_predict))
4

1 に答える 1

6

必要な情報は、マトリックスに配置する方が適切です。

v1 <- 1:3
v2 <- c(1,2,2)
mat1 <- outer(v1,v1,`>`)
mat2 <- outer(v2,v2,`>`)
both <- mat1 & mat2

不等式が保持する位置を確認するには、次を使用しますwhich

which(both,arr.ind=TRUE)
#      row col
# [1,]   2   1
# [2,]   3   1

コメント:

  • この答えは、ループよりもはるかに高速である必要があります。ただし、実際には 2 つのベクトルを並べ替えているだけなので、不等式の完全なセットを取得するよりも高速な方法がおそらくあります...
  • あなたの場合、部分的な順序付けしかありません(与えられたijの場合、両方の次元でどちらも厳密には他方よりも大きくない可能性があるため)。v1最初に で、次にでソートすることに満足している場合はv2、 data.table パッケージを使用して簡単に完全な順序を取得できます。

    set.seed(1)
    v1 <- sample.int(10,replace=TRUE)
    v2 <- sample.int(10,replace=TRUE)
    
    require(data.table)
    DT <- data.table(v1,v2)
    setkey(DT)
    DT[,rank:=.GRP,by='v1,v2']
    

    を与える

        v1 v2 rank
     1:  1  8    1
     2:  3  3    2
     3:  3  8    3
     4:  4  2    4
     5:  6  7    5
     6:  7  4    6
     7:  7 10    7
     8:  9  5    8
     9: 10  4    9
    10: 10  8   10
    

    それはあなたが次に何をするつもりだったかによります。

于 2013-09-29T21:04:53.877 に答える