```Javascript (E6) 175
==
**Edit**
Fixed bug, possibly out of range return value for d

139 Logic, 36 I/O

F=(x,y,d,m,D='NESW')=>(d=D.search(d),[...m].map(s=>({M:_=>(y-=[-1,0,1,0][d],x-=[0,-1,0,1][d]),R:_=>d+=1,L:_=>d+=3}[s](),d%=4)),[x,y,D[d]]);
p=prompt,p(F(...p().split(','),p()))

**Basic ungolfed**

function F(x,y,d,m) // In golf code use arrow sintax instead of 'function'
{
var D='NESW';
d = D.search(d); // map from letters to offset position 0..3
var driver = { // driver object, each function map one of  command letters M,R,L
M: function() {
y -= [-1, 0, 1, 0]; // subtract to be sure to have a numeric and not string result
x -= [0, -1, 0, 1]; // subtract to be sure to have a numeric and not string result
},
R: function() {
d += 1;
},
L: function() {
d += 3; // with modulo 4 will be like -= 1
}
}
m = [...m]; // string to array, to use iteration function
m.forEach(  // array scan, in golf versione use map do nearly the same and is shorter
function (s) {
driver[s](); // call driver function
d = d % 4;   // restrict value to modulo 4
}
);  // in golf version, use comma separated expression to avoid 'return'
return [x,y, D[d]] // return last status
}
**Test**
Test in javascript console in Firefox. It's simpler to test the function F avoiding the popups.

F(1,2,'N','MRMLM')

Output

[ 2, 4, "N" ]

```