title: missing value where TRUE/FALSE needed in R
body: <p>When I run the following code without commenting <code>gr.ascent(MMSE, 0.5, verbose=TRUE)</code> I receive this error <code>Error in b1 * x : 'b1' is missing</code> but when I comment that line I receive the following error when testing MMSE with these arguments <code>MMSE(2,1,farmland$farm,farmland$area)</code>. Do you know where my problem is lying? </p>
  
  <pre><code>Error in if (abs(t[i]) &lt;= k) { : missing value where TRUE/FALSE needed
  </code></pre>
  
  <p>Here's my code: </p>
  
  <pre><code>farmland &lt;- read.csv("FarmLandArea.csv")
  str(farmland)
  fit=lm(farm~land,data=farmland)
  mean.squared.residuals &lt;- sum((lm(farm~land,data=farmland)$residuals)^2)/(length(farmland$farm)-2)
  
  #gradient descent
  
  #things I should possibly use: solve(t(X)%*%X, t(X)%*%y)
  gr.ascent&lt;- function(df, x0, alpha=0.2, eps=0.001, max.it = 50, verbose = FALSE){
    X1 &lt;- x0
    cond &lt;- TRUE
    iteration &lt;- 0
    if(verbose) cat("X0 =",X1,"\n")
    while(cond){
      iteration &lt;- iteration + 1
      X0 &lt;- X1
      X1 &lt;- X0 + alpha * df(X0)
      cond &lt;- sum((X1 - X0)^2) &gt; eps &amp; iteration &lt; max.it
      if(verbose) cat(paste(sep="","X",iteration," ="), X1, "\n")
    }
    return(X1)
  }
  
  
  k=19000
  
  #rho &lt;- function(t, k=19000){
  #  for (i in seq(1,length(t))){
  #    if (abs(t[i]) &lt;= k)
  #      return(t[i]^2)
  #    else 
  #      return(2*k*abs(t[i])-k^2)
  
  #  }
  
  #}
  
  #nicer implementation of rho. ifelse works on vector
  rho&lt;-function(t,k) ifelse(abs(t)&lt;=k,t^2,(2*k*abs(t))-k^2)
  rho.prime &lt;- function(t, k=19000){
    out &lt;- rep(NA, length(t))
    for (i in seq(1,length(t))){
      if (abs(t[i]) &lt;= k)
      { print(2*t[i])
        out[i] &lt;- 2*t[i] 
      }
      else 
      {
        print(2*k*sign(t[i]))
        out[i] &lt;- 2*k*sign(t[i])
      }
    }
    return(out)
  }
  MMSE &lt;- function(b0, b1, y=farmland$farm, x=farmland$land){
     # Calls rho.prime() here with argument y-b0-b1*x
  
  
     #Why should we call rho.prime? in the html page you have used rho!?
    n = length(y)
    total = 0
    for (i in seq(1,n)) {
      #total = total + rho(t,k)*(y[i]-b0-b1*x[i])
      total = total + rho.prime(y-b0-b1*x,k)*(y[i]-b0-b1*x[i])
    }
    return(total/n)
  }
  
  gr.ascent(MMSE(1,2), 0.5, verbose=TRUE)
  </code></pre>
  
  <p>In which FarmLand csv data is like the following:</p>
  
  <pre><code>state,land,farm
  Alabama,50744,14062
  Alaska,567400,1375
  Arizona,113635,40781
  Arkansas,52068,21406
  California,155959,39688
  Colorado,103718,48750
  Connecticut,4845,625
  Delaware,1954,766
  Florida,53927,14453
  Georgia,57906,16094
  Hawaii,6423,1734
  Idaho,82747,17812
  Illinois,55584,41719
  Indiana,35867,23125
  Iowa,55869,48125
  Kansas,81815,72188
  Kentucky,39728,21875
  Louisiana,43562,12578
  Maine,30862,2109
  Maryland,9774,3203
  Massachusetts,7840,812
  Michigan,58110,15625
  Minnesota,79610,42031
  Mississippi,46907,17422
  ...
  </code></pre>
  
  <p>Here's the result of dput(farmland):</p>
  
  <pre><code>&gt; dput(farmland)
  structure(list(state = structure(1:50, .Label = c("Alabama", 
  "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", 
  "Delaware", "Florida", "Georgia", "Hawaii", "Idaho", "Illinois", 
  "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", 
  "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi", 
  "Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire", 
  "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", 
  "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", 
  "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", 
  "Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", 
  "Wyoming"), class = "factor"), land = c(50744L, 567400L, 113635L, 
  52068L, 155959L, 103718L, 4845L, 1954L, 53927L, 57906L, 6423L, 
  82747L, 55584L, 35867L, 55869L, 81815L, 39728L, 43562L, 30862L, 
  9774L, 7840L, 58110L, 79610L, 46907L, 68886L, 145552L, 76872L, 
  109826L, 8968L, 7417L, 121356L, 47214L, 48711L, 68976L, 40948L, 
  68667L, 95997L, 44817L, 1045L, 30109L, 75885L, 41217L, 261797L, 
  82144L, 9250L, 39594L, 66544L, 24230L, 54310L, 97105L), farm = c(14062L, 
  1375L, 40781L, 21406L, 39688L, 48750L, 625L, 766L, 14453L, 16094L, 
  1734L, 17812L, 41719L, 23125L, 48125L, 72188L, 21875L, 12578L, 
  2109L, 3203L, 812L, 15625L, 42031L, 17422L, 45469L, 95000L, 71250L, 
  9219L, 734L, 1141L, 67500L, 10938L, 13438L, 61875L, 21406L, 55000L, 
  25625L, 12109L, 109L, 7656L, 68281L, 17031L, 203750L, 17344L, 
  1906L, 12578L, 23125L, 5703L, 23750L, 47188L)), .Names = c("state", 
  "land", "farm"), class = "data.frame", row.names = c(NA, -50L
  ))
  </code></pre>