R是否具有处理负数值的对数的函数?

问题描述

在数学中,指数和对数函数可以从实数到复数来概括。指数函数使用欧拉公式进行了概括,对数被概括为complex logarithm。后者允许输入为复数或负实数。

感谢R中的exponential and logarithmic function可以容纳复杂的输入。这两个函数都可以采用复杂的输入,并产生该输入的适当指数或对数。但是,如果输入负数作为数字值(与复数相对),则log函数不会为此输入产生正确的(复数)输出。这是一个例子。

#Define negative real value as numeric/complex object
minusfour.numeric <- -4
minusfour.complex <- complex(real = -4,imaginary = 0)

#Apply the log function to these inputs
log(minusfour.complex)
[1] 1.386294+3.141593i

log(minusfour.numeric)
[1] NaN
Warning message:
In log(minusfour.numeric) : NaNs produced

理想情况下,当您提供负数值作为输入时,如果log函数给出了正确的(复杂的)输出,那就太好了。不幸的是,它似乎没有被编程为执行此操作。


我的问题:是否在R中编程了另一个对数函数来容纳负数字输入(即为这些输入提供适当的复数输出)?

解决方法

基于Hugh的最高评价,看来最简单的方法就是将函数编写为基础基础log函数的变体。我决定使用一个版本,如果输出中没有虚部,那么它将在计算结束时转换回实数。这是代码:

Log <- function(x,base = exp(1)) {
  LOG <- base::log(as.complex(x),base = base)
  if (all(Im(LOG) == 0)) { LOG <- Re(LOG) }
  LOG }

此代码适用于正数或负数,当您为其提供非负数时,会提供数字输出。

#Apply the Log function to +4 and -4
Log(-4)
[1] 1.386294+3.141593i

Log(4)
[1] 1.386294