Rspacer
Rspacer

Reputation: 2429

How to convert MATLAB function into R function?

I am both new to maximum likelihood and writing loop functions in R. I am playing around with the function in Matlab and I'm wondering if its correctly transcribed in R? There is not easy way for me to check it since I'm not familiar with MATLAB. The code uses equations (1) and (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)
  }

Upvotes: 0

Views: 347

Answers (2)

G. Grothendieck
G. Grothendieck

Reputation: 269441

The inputs can be either numeric scalars or vectors. If you don't have Matlab you could install Octave which is free and compatible with Matlab and try the original Matlab code there and then compare the outputs for a test case to the result of running the following on the same test case to ensure that it gives the same result.

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

Upvotes: 2

Konrad
Konrad

Reputation: 18585

You can use matconv package to facilitate automatic code conversion:

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

will return:

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

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

R mailing list has also useful bash script that you may use for that purpose.

Upvotes: 1

Related Questions