19

負の数の実立方根を直接取得する関数があるかどうかを確認しようとしています。たとえばJavaには、Math.cbrt()関数があります。Rで同等のものを探しています。

それ以外の場合、私の現在のハックは次のとおりです。

x <- -8
sign(x) * abs(x)^(1/3)

これは非常に洗練されておらず、毎回入力するのが面倒です。どうも!

4

3 に答える 3

24

独自の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
于 2012-11-05T17:29:53.227 に答える
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)
于 2012-11-05T16:40:18.987 に答える
-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));
于 2012-11-05T16:30:59.583 に答える