2015-04-28 3 views
1

У меня есть вектор чисел, который содержит отрицательные числа, и я хотел бы поднять его до дробного показателя, но не могу понять, как это сделать. Вот пример кода.Поднятие вектора с отрицательными числами до дробного показателя в R

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

b возвращает NAN значения при a отрицательна. Однако

d = -5^(5/2) 

работает. Я знаю, что это из-за приоритета в R, но как сделать то, что я хочу, что нужно умножить на абсолютное значение a, а затем назначить отрицательный (а также оценить возможность того, что a == 0)?

Я знаю, что это больше вопрос математики и R, чем статистика, поэтому, если это нужно переместить, я сделаю это.

+0

Как и в OP, я думаю, что это, вероятно, принадлежит SO, но вам не нужно его перемещать самостоятельно: если люди согласятся со мной, он будет перенесен для вас. – Silverfish

ответ

7
exponent <- function(a, pow) (abs(a)^pow)*sign(a) 
+3

Хорошо. Более элегантный, чем мой. –

+0

Отлично. Никогда не знала о знаке(). – user44796

+0

Если у вас нет доступа к 'sign', вы обычно можете получить с помощью математического определения функции signum: x/abs (x) для x! = 0 и 0 в противном случае. – Sycorax

2
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 

Возможно, это не самый эффективный способ сделать это, но идея должна быть полезной.

0

Ваш противоречивый результат проистекает из того факта, что власть как своего рода умножение связывает сильнее отрицания. Т.е.,

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

Такого рода фракционной власти должны справедливо не быть определены для отрицательных аргументов. Это будет решение

x^2 = (-5)^5 = - 5^5 

, которого невозможно решить в реальных количествах.

Дробные мощности комплексных чисел - это банда червей, которую вы действительно не должны открывать.

Смежные вопросы