我有一个要追加的向量,这里是代码,由于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)
您想要的信息最好放在矩阵中:
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)
评论:
在你的情况下,只存在一个偏序(因为,对于一个给定i和j,有可能没有一个严格大于另两个维度).如果您对先打开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)
这取决于你下一步计划做什么.