【问题标题】:Raising vector with negative numbers to a fractional exponent in R将带负数的向量提升为R中的小数指数
【发布时间】:2015-07-07 08:32:28
【问题描述】:

我有一个包含负数的数字向量,我想将其提升为小数指数,但不知道该怎么做。这是一些示例代码。

a = seq(5,-5,1)
b = a^(5/2)

ba 为负数时返回NAN 值。不过,

d = -5^(5/2) 

有效。我知道这是因为 R 中的优先级,但是如何做我想要的,即乘以a 的绝对值,然后分配负数(同时还评估a == 0 的可能性)?

我知道这更多的是数学和 R 问题而不是统计数据,所以如果需要移动它,我会这样做。

【问题讨论】:

  • 就像 OP 我认为这可能属于 SO,但您不需要自己移动它:如果人们同意我的观点,它将为您迁移。

标签: r math


【解决方案1】:
b = rep(NA,length(a))       # create a vector of length equal to length of a
b[a>=0] =  ( a[a>=0])^(5/2) # deal with the non-negative elements of a
b[a< 0] = -(-a[a< 0])^(5/2) # deal with the negative elements of a

也许不是最有效的方法,但这个想法应该是可用的。

【讨论】:

    【解决方案2】:
    exponent <- function(a, pow) (abs(a)^pow)*sign(a)
    

    【讨论】:

    • 好一个。比我的更优雅。
    • 太好了。从来不知道sign()。
    • 如果您无权访问sign,通常可以通过使用符号函数的数学定义得到:x/abs(x) for x != 0 and 0 else.
    【解决方案3】:

    你的矛盾结果源于这样一个事实,即作为一种乘法的幂比否定的结合力更强。即,

    -5^(5/2) = - ( 5^(5/2) ).
    

    这种分数幂不应该被定义为否定论点。这将是

    的解决方案
    x^2 = (-5)^5 = - 5^5
    

    这是不可能用实数解决的。

    复数的分数幂是一罐你真的不想打开的蠕虫。

    【讨论】:

      猜你喜欢
      • 2022-11-03
      • 1970-01-01
      • 1970-01-01
      • 2011-10-28
      • 2021-11-09
      • 1970-01-01
      • 2021-03-18
      • 2022-11-11
      • 2015-03-24
      相关资源
      最近更新 更多