R:is.integer不';不计算平方根
基本上,我想检查一个数字的平方根是否为整数,因此我尝试了以下函数:R:is.integer不';不计算平方根,r,R,基本上,我想检查一个数字的平方根是否为整数,因此我尝试了以下函数: is.integer(sqrt(4)) 预期值为TRUE,而实际结果为FALSE。我读过其他一些帖子,似乎我需要使用L强制转换为整数。然而,我不知道我该如何使它在我的情况下工作 是的。甚至: is.integer(1) ## [1] FALSE 因为类型(与值相反)不是整数。查看帮助?is.integer。函数为。此处显示wholenumber: is.wholenumber <- function(x, t
is.integer(sqrt(4))
预期值为TRUE
,而实际结果为FALSE
。我读过其他一些帖子,似乎我需要使用L
强制转换为整数。然而,我不知道我该如何使它在我的情况下工作 是的。甚至:
is.integer(1)
## [1] FALSE
因为类型(与值相反)不是整数。查看帮助?is.integer
。函数为。此处显示wholenumber
:
is.wholenumber <-
function(x, tol = .Machine$double.eps^0.5)
abs(x - round(x)) < tol
is.wholenumber(sqrt(4))
## [1] TRUE
wholenumber对您为什么使用√.Machine$double.eps,而不是直接使用epsilon值。看起来像是一个有点启发性的选择(将tol作为可选参数证明;如果他们非常确定tol的值,那么它就不是参数)我看到这只是一个tol默认值,如果您在方法体中使用tol的根,则会直接将其称为错误。机器默认epsilon通常应小于1,并且取根将使其更大,从而导致默认方法的精度低于配置的精度。另外,如果我设置了默认值,可能会得到与传递相同值作为参数不同的结果。我意识到这不是代码审查,但有时我会情不自禁。@ErwinKalvelagen谢谢你的解决方案。但是,我很难理解你的代码。什么是.Machine$double.eps
?@psaxton:“如果我设置了默认值,可能会得到一个不同的结果,而不是将相同的值作为参数传递。”。真正地你能举一个可复制的例子吗?我很怀疑/惊讶。。。