title: R Standardizing numeric variables in dataframe while retaining factor variables
body: <p>I have a dataframe (dcc) loaded in R which I have narrowed down to complete cases. </p>
  
  <pre><code>str(dcc)
  
  'data.frame':   41715 obs. of  9 variables:
   $ XCoord                  : num  661382 661412 661442 661472 661502 ...
   $ YCoord                  : num  648092 648092 648092 648092 648092 ...
   $ OBJECTID                : int  1 2 3 4 5 6 7 8 9 10 ...
   $ POINTID                 : int  1 2 3 4 5 6 7 8 9 10 ...
   $ GRID_CODE               : int  0 0 0 0 0 0 0 0 0 0 ...
   $ APPL_COST_DIST_RIV_COAST: num  21350 21674 22185 22748 23448 ...
   $ APPL_DEM30              : int  785 793 792 769 765 777 784 789 781 751 ...
   $ APPL_DEM30_SLOPE        : num  19.7 13.3 18.6 23.2 21 ...
   $ APPL_SITE_NONSITE       : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
  </code></pre>
  
  <p>I want to standardize the numeric and integer variables by subtracting the mean and dividing by the standard deviation. When I apply the following code, I inadvertently drop the factor variable APPL_SITE_NONSITE from the dataframe: </p>
  
  <pre><code>ind &lt;- sapply(dcc, is.numeric)
  dcc.s&lt;-sapply(dcc[,ind], function(x) (x-mean(x))/sd(x))
  dcc.s&lt;-data.frame(dcc.s)
  </code></pre>
  
  <p>If I'm not mistaken, that happens because ind=FALSE for that variable. It seems like I need some combination of a for loop and if/else statement to standardize the numeric variables and leave the factor variable alone. I have tried a number of permutations, but keep getting errors. For example, the following code: </p>
  
  <pre><code>dcc.s &lt;- for (i in 1:ncol(dcc)){ sapply(dcc[,i],
  if (is.numeric(dcc[,i])==TRUE) {
  function(x) (x-mean(x))/sd(x) }
   else {dcc[,i]})
  }
  </code></pre>
  
  <p>returns the error: </p>
  
  <p>Error in match.fun(FUN) : 
    c("'if (is.numeric(dcc[, i]) == TRUE) {' is not a function, character or symbol", "'    function(x) (x - mean(x))/sd(x)' is not a function, character or symbol", "'} else {' is not a function, character or symbol", "'    dcc[, i]' is not a function, character or symbol", "'}' is not a function, character or symbol")</p>
  
  <p>Perhaps this is a simple formatting error or misplaced bracket, but I'm thoroughly stuck. I am open to other approaches if there is an more elegant way to do this. Any help would be much appreciated. </p>