Как векторизовать это для цикла в R - PullRequest
0 голосов
/ 29 июня 2018

У меня нет большого опыта в R. У меня есть цикл for, подобный этому:

combination<-read.csv(choose.files())
rownames(n_weight)<-1:154
colnames(n_weight)<-rownames(n_weight)
for(i in 1:length(n_weight)){
  for(j in 1:length(n_weight)){
  if(i==j){
    n_weight[i,j]<-1
  }
}}

idex <- dim(combination)[1]   #idex is length 
m <- as.data.frame(matrix(0, ncol = idex, nrow = idex))
rownames(m) <- as.numeric(combination$FID)
colnames(m) <- rownames(m)



# n_weight: 154X154 matrix
# m: 23562*23562 matrix
# combination: data.frame with 23562 obs. 

for(i in 1:23562){
  for (j in 1:23562){
    if(n_weight[combination[i,]$PC,combination[j,]$PC]==1){
      if(n_weight[combination[i,]$RC,combination[j,]$RC]==1){
        m[i,j]<-1}
    }}}

Это занимает слишком много времени. Есть ли способ векторизовать этот цикл? Спасибо!

1 Ответ

0 голосов
/ 29 июня 2018

Попробуйте это:

met_conditions <- ifelse(n_weight[combination$PC, combination$PC] == 1 & 
     n_weight[combination$RC, combination$RC] == 1, TRUE, FALSE)

m[met_conditions] <- 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...