如何将 MATLAB 函数转换为 R 函数?

How to convert MATLAB function into R function?

我对最大似然和在 R 中编写循环函数都是新手。我正在玩弄 Matlab 中的函数,我想知道它是否在 R 中正确转录?由于我不熟悉 MATLAB,因此没有简单的方法来检查它。该代码使用等式 (1) 和 (3) from the paper.

#Matlab Code. The matlab code imposes two conditions under which lnpq takes  different values depending on q.
p=N/K;
if q == 0
    lnqp = log(p);
else
    lnqp =((p^q)-1)/q;
end
 
Y = ((aa *((p*K/Ka)-1))-1)*lnqp;


#R code. In the R code function, I'm trying to impose similar conditions  on lnpq. Here is my attempt. However, I don't know how to compare if the values obtained from Matlab are similar to R. I am not sure how to verify across platforms
       
p <- c(1:00)
skewfun <- function(aa, K, Ka, q){
  Y <- ifelse(q = 0, ((aa *((p*K/Ka)-1))-1)*log(p),((aa *((p*K/Ka)-1))-1)*((p^q)-1)/q)
  }

可以使用matconv包来方便自动转码:

matconv::mat2r(inMat = "Y = ((aa *((p*K/Ka)-1))-1)*lnqp;")

将 return:

$matCode
[1] "Y = ((aa *((p*K/Ka)-1))-1)*lnqp;"

$rCode
[1] "Y <- ((aa *((p*K/Ka)-1))-1)*lnqp"

R 邮件列表也有 useful bash script 您可以用于此目的。

输入可以是数值标量或向量。如果您没有 Matlab,您可以安装 Octave,它是免费的并且与 Matlab 兼容,并在那里尝试原始的 Matlab 代码,然后将测试用例的输出与以下 运行 的结果进行比较相同的测试用例以确保它给出相同的结果。

f <- function(aa, N, K, Ka, q) {
  p <- N / K
  lnqp <- ifelse(q == 0, log(p), (p^q - 1) / q)
  Y <- (aa * (p * K / Ka - 1) - 1) * lnqp
  Y
}

aa <- 1; N <- 1; K <- 1; Ka <- 1; q <- 1  # test data: change to use your data
f(aa, N, K, Ka, q)
## [1] 0