compatea在两个向量中的值,并将比较结果分配到R中的新向量

1 r vector

我有一个要追加的向量,这里是代码,由于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)
}
Run Code Online (Sandbox Code Playgroud)

如果我使用的话,我发现很难找出比较的索引

   #compare<-rep(0,times=nrow(opt_predict)*nrow(opt_predict))
Run Code Online (Sandbox Code Playgroud)

Fra*_*ank 6

您想要的信息最好放在矩阵中:

v1 <- 1:3
v2 <- c(1,2,2)
mat1 <- outer(v1,v1,`>`)
mat2 <- outer(v2,v2,`>`)
both <- mat1 & mat2
Run Code Online (Sandbox Code Playgroud)

要查看不平等所适用的位置,请使用which:

which(both,arr.ind=TRUE)
#      row col
# [1,]   2   1
# [2,]   3   1
Run Code Online (Sandbox Code Playgroud)

评论:

  • 这个答案应该比你的循环快得多.但是,你真的只是对两个向量进行排序,所以可能有一种更快的方法来做到这一点,而不是采用详尽的不等式集...
  • 在你的情况下,只存在一个偏序(因为,对于一个给定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']
    
    Run Code Online (Sandbox Code Playgroud)

    这使

        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
    
    Run Code Online (Sandbox Code Playgroud)

    这取决于你下一步计划做什么.