在R中矢量化双循环

Ket*_*tty 3 for-loop r vectorization

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

*

akr*_*run 6

它可以更好地完成outer.当我们检查第二列中的所有值是否与自身对应时,创建逻辑表达式outer,将其转换为数字索引,然后将值替换为1或100

out <- 1 + (outer(datax[,2], datax[,2], `==`))
out[] <- c(1, 100)[out]
Run Code Online (Sandbox Code Playgroud)

或者在一行中

ifelse(outer(datax[,2], datax[,2], `==`), 100, 1)
Run Code Online (Sandbox Code Playgroud)

或者使用带有变化pmaxouter

do.call(pmax, list(outer(datax[,2], datax[,2], `==`) * 100, 1))
Run Code Online (Sandbox Code Playgroud)