我正在尝试查看是否有一个函数来直接获取负数的真实立方根。例如,在Java中,有Math.cbrt()
函数。我正在寻找R中的等价物。
否则,我目前的黑客是:
x <- -8
sign(x) * abs(x)^(1/3)
每次输入都非常不优雅和麻烦。 THX!
答案 0 :(得分:23)
听起来你只需要定义自己的Math.cbrt()
功能。
这将使得操作从不优雅和繁琐的东西转变为干净,富有表现力且易于应用的东西:
Math.cbrt <- function(x) {
sign(x) * abs(x)^(1/3)
}
x <- c(-1, -8, -27, -64)
Math.cbrt(x)
# [1] -1 -2 -3 -4
答案 1 :(得分:3)
在R中,您可能需要定义一个新功能,将结果限制为您的目标:
> realpow <- function(x,rad) if(x < 0){ - (-x)^(rad)}else{x^rad}
> realpow(-8, 1/3)
[1] -2
> realpow(8, 1/3)
[1] 2
如果引用运算符并在名称中使用周围的“%”符号,则可以进行中缀操作。因为它的优先级很低,所以你需要使用括号,但你似乎已经知道了。
> `%r^%` <- function(x, rad) realpow(x,rad)
> -8 %r^% 1/3
[1] -2.666667 # Wrong
> -8 %r^% (1/3)
[1] -2 #Correct
同意将提问者的版本纳入其矢量化容量:
`%r^%` <- function(x, rad) sign(x)*abs(x)^(rad)
答案 2 :(得分:-1)
在Java中是这样的:
There are 3 cube-roots. Assuming you want the root that is real, you should do this:
x = 8; // Your value
if (x > 0)
System.out.println(Math.pow(x, 1.0 / 3.0));
else
System.out.println(-Math.pow(-x, 1.0 / 3.0));