这是我到目前为止的代码,但它不会返回任何内容,我不明白为什么。谢谢你的帮助
is_magic <- function(test){
test <- matrix(test)
test_dim <- dim(test)
if (test_dim[1] == test_dim[2]){
test_diag <- diag(test)
diag_sum <- sum(test_diag)
row_sum <- rowsum(test, nrow(test))
col_sum <- colsum(test, ncol(test))
if ((row_sum == col_sum) && (col_sum == diag_sum)){
return (True)
} else {
return (False)
}
}
}
答案 0 :(得分:1)
根据Wikipedia,
魔方是n×n方格(其中n是数字) 在每一侧的细胞)充满了明显的正整数 范围1,2,...,n ^ 2使得每个单元包含不同的整数 并且每行,列和对角线中的整数之和相等。
您的代码中仍存在一些缺陷。我建议将矩阵传递给您的函数,而不是在其中使用matrix
,并使用rowSums
/ colSums
。此外,R区分大小写,布尔值为TRUE
/ FALSE
,而不是True
/ False
。
所以也许试试
is_magic <- function(test) {
if (ncol(test) == nrow(test)) {
if (length(unique(test))==length(test) && all(test>0)) {
diag_sum <- sum(diag(test))
antidiag_sum <- sum(diag(test[,ncol(test):1]))
row_sum <- rowSums(test)
col_sum <- colSums(test)
if (all(row_sum == col_sum) && col_sum[1] == diag_sum && diag_sum == antidiag_sum){
return (TRUE)
}
}
}
return(FALSE)
}
is_magic(m<-matrix(c(2,9,4,7,5,3,6,1,8), 3))
# [1] TRUE
is_magic(matrix(c(1,9,4,7,5,3,6,1,8), 3))
# [1] FALSE
答案 1 :(得分:0)
R中的索引从1开始:
替换
test_dim[0] == test_dim[1]
通过
test_dim[1] == test_dim[2]
也替换
nrow[test]
和ncol[test]
nrow(test)
和ncol(test)