The following behavioral differences have been detected between the Matlab functions and their R counterparts. In order to save time, these differences will not be addressed, since they could require extensive reworking of a function. However, such differences may very well cause unexpected problems in some situations, which is why compiling this list is so important. The tables below might provide a good starting point for identifying and fixing bugs.
As general remarks, one should keep in mind that:
- For compliance with IEC 60559, the
round
in base R rounds .5 to the nearest even integer, whereas the homonym function in Matlab rounds up (or down, if negative). - Some clobal variables have been added as a new (last) argument to the function they appear in.
- When a function is defined on Matlab with multiple outputs, as in
[y1, y2] = f(x)
, it will output onlyy1
if called without assignment, as inf(3)
, or if called with a one-length assignment, as ina = f(3)
. In order to receive the full output, one must assign two variables to the left side of the assignment operator, as in[a, b] = f(3)
. rBAPS Functions that might be affected by this behavior includeetsiParas
.
Function | Argument | Value | Matlab output | R output |
---|---|---|---|---|
ownNum2Str |
number |
NaN |
'NAN' |
error |
ownNum2Str |
number |
<vector> |
'<vector elements>' |
'<vector elements>' + warning |
repmat |
length(n) |
> 2 |
> 2D matrix | 2D matrix |
Function | Matlab output | R output |
---|---|---|
max |
Can handle complex numbers | Cannot handle complex numbers |
If you find an error, one of the first things to try is to compare the R code with its MATLAB equivalent, which you can find here. Some common causes are as follows:
R uses []
for that, whereas Matlab uses ()
for both function calling and object subsetting. Therefore, often objects will be mistakenly interpreted as functions by R due to improper translation.
Homonymous functions were found on several files with code that, upon first inspection, are deemed identical. That might not always be the case (especially for large files, where visual inspection may be especially imperfect), so errors might have emerged from calling homonymous functions that are supposed to be slightly different.