程序源:
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循环并拥有纯矩阵公式?
答案 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))]