首页 > 解决方案 > 如何将MATLAB函数转换为R函数?

问题描述

我既是最大似然的新手,又是在 R 中编写循环函数。我正在使用 Matlab 中的函数,我想知道它是否在 R 中正确转录?因为我不熟悉 MATLAB,所以我没有简单的方法来检查它。该代码使用论文中的等式 (1) 和 (3) 。

#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)
  }

标签: rfunctionmatlabcurve-fitting

解决方案


输入可以是数值标量或向量。如果您没有 Matlab,您可以安装免费且与 Matlab 兼容的Octave,并在那里尝试原始的 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

推荐阅读