为何调用hilbert_matrix(10)返回NULL?R语言代码问题求助
问题原因与解决方法
- 问题根源:你的条件判断里包含
!is.integer(dim_mat),但在R中直接输入的10属于numeric(双精度浮点数)类型,并非严格的integer类型,因此这个条件会触发,函数直接返回NULL。 - 验证方式:在控制台执行
is.integer(10)会返回FALSE,而is.numeric(10)返回TRUE,这就是核心问题所在。
修改方案
方案一:放宽类型判断,检查输入是否为整数值(推荐)
把判断是否为整数的条件从!is.integer(dim_mat)改为as.integer(dim_mat) != dim_mat,这样既允许输入numeric类型的整数值,又能过滤非整数的输入:
hilbert_matrix <- function(dim_mat) { if (!is.numeric(dim_mat) || length(dim_mat) != 1 || dim_mat <= 0 || as.integer(dim_mat) != dim_mat) { return(NULL) } hilbert <- matrix(0, nrow = dim_mat, ncol = dim_mat) for (i in 1:dim_mat) { for (j in 1:dim_mat) { hilbert[i, j] <- 1 / (i + j - 1) } } return(hilbert) }
方案二:严格传入integer类型参数
保持原函数代码不变,调用时给数值加上L后缀表示integer类型:
hilbert_matrix(10L)
内容的提问来源于stack exchange,提问作者sikimimi
相关产品推荐
相关产品推荐

