如何删除此for循环

时间:2019-11-04 12:56:52

标签: r loops matrix

程序源:

gf <- c(2, 1, NA, 4, 5,
        4, 5, NA, 1, 2,
        3,NA, 1, NA, NA)

dim(gf) <- c(5,3)

    n = nrow(gf)
    r = ncol(gf)

    for (i in 1:r) {
        col <- gf[ ,i]
        if (FALSE %in% (c(1:n) == col[col])) {
          cat("Error (i):", i, "\n")
          break
        }
    }
    gf

矩阵表示每轮一列的游戏文件。如果x在游戏中遇到y,则y在同一游戏中遇到x。测试对称矩阵中的冗余是否一致。

    Matrix:
      [,1] [,2] [,3]
[1,]    2    4    3
[2,]    1    5   NA
[3,]   NA   NA    1
[4,]    4    1   NA
[5,]    5    2   NA

如何消除for循环并拥有纯矩阵公式?

2 个答案:

答案 0 :(得分:0)

不确定我是否完全理解您的问题,但是无论如何将您的代码转换为apply调用都差不多。

类似的事情将为您提供列名,如果可以,则返回TRUE,否则返回FALSE。

sapply(as.data.frame(gf), function(x) sum(c(1:nrow(gf)) != x[x], na.rm=TRUE) == 0)

答案 1 :(得分:0)

如果您只想按列运行检查,则可以使用以下内容:

apply(gf, 2, function(v) all(1:length(v) == v[v],na.rm = T))

使得符合条件的所有列都可以获取为

rs <- seq(r)[apply(gf, 2, function(v) all(1:length(v) == v[v],na.rm = T))]