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" ]