負の数の実立方根を直接取得する関数があるかどうかを確認しようとしています。たとえばJavaには、Math.cbrt()
関数があります。Rで同等のものを探しています。
それ以外の場合、私の現在のハックは次のとおりです。
x <- -8
sign(x) * abs(x)^(1/3)
これは非常に洗練されておらず、毎回入力するのが面倒です。どうも!
独自の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
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)
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));