Векторизация двойных петель в R - PullRequest
0 голосов
/ 25 сентября 2018

Я новичок в R и пытаюсь векторизовать свои коды ниже.

Какой лучший способ сделать это?Большое спасибо!

*

l_mat <- data.frame(matrix(ncol = 4, nrow = 4))
datax <- data.frame("var1"= c(1,1,1,1), "Var2" = c(2,2,2,2), "Var3"=c(3,3,3,3), "Var4"=c(4,4,4,4))
for (i in 1:4) {
      for (j in 1:4) {
             if (datax[i, 2] == datax[j, 2]) {
                   l_mat[i, j] <- 100
               } else {
                     l_mat[i, j] <- 1
                 }
         }
   }

*

1 Ответ

0 голосов
/ 25 сентября 2018

Лучше сделать с outer.Поскольку мы проверяем, совпадают ли все значения во втором столбце с самим собой, создайте логическое выражение с outer, преобразуйте его в числовой индекс и затем замените значения на 1 или 100

out <- 1 + (outer(datax[,2], datax[,2], `==`))
out[] <- c(1, 100)[out]

* 1006.* Или в одной строке
ifelse(outer(datax[,2], datax[,2], `==`), 100, 1)

Или используйте вариант с pmax и outer

do.call(pmax, list(outer(datax[,2], datax[,2], `==`) * 100, 1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...