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

注释:

  • 这个答案应该比你的循环快很多。但是,您实际上只是对两个向量进行排序,因此可能有比采用详尽的不等式集更快的方法来做到这一点......
  • 在您的情况下,只有部分排序(因为,对于给定的iand j,可能没有一个在两个维度上都严格大于另一个)。v1如果您对先 on然后 on排序感到满意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 回答