[R] R looping help

MacQueen, Don macqueen1 at llnl.gov
Fri May 17 01:06:18 CEST 2013


You can use basic debugging techniques to help understand what is going
wrong. For example, insert a cat() statement right before the statement
which is giving the warning. Like this:

## your code
   mses[st]<-sum(resid(model)^2)/(length(xi)-2)
   ssr<-var(yi)*(length(xi)-1)-sum(resid(model)^2)

## insert two lines
   tmp <- (var(yi)*(length(xi)-1))
   cat('i',i,'st',st,'ssr',ssr,'denominator',tmp,'\n')

## continue with your code
   rsquares[st]<-ssr/(var(yi)*(length(xi)-1))
   fRatio<-ssr/mses[st]


This example should help you understand the warning message

> foo <- numeric(5)
> foo[2] <- c(1,3)
Warning message:
In foo[2] <- c(1, 3) :
  number of items to replace is not a multiple of replacement length




-- 
Don MacQueen

Lawrence Livermore National Laboratory
7000 East Ave., L-627
Livermore, CA 94550
925-423-1062





On 5/16/13 3:17 AM, "rishard" <orc15 at uclive.ac.nz> wrote:

>Hey I'm not really sure what I should put on here, but I am having trouble
>with my R code.  I am trying to get the p-values, R^2s etc for a number of
>different groups of variables that are all in one dataset.
>
>This is the code:
>
>#Stand counter
>st<-1
>#Collections
>stands<-numeric(67)
>slopes<-numeric(67)
>intercepts<-numeric(67)
>mses<-numeric(67)
>rsquares<-numeric(67)
>pValues<-numeric(67)
>#Start lists for X and Y values within each stand
>xi<-numeric(0)
>yi<-numeric(0)
>#Set the first element to the starting X and Y values
>xi[1]=X[1]
>yi[1]=Y[1]
>#Start looping working through your data, record by record
>for (i in 2:length(X)) {
>  #If you are in the same stand as on the last record, continue to
>  #collect X and Y values
>  if(Stand[i]==Stand[i-1]) {
>    xi=cbind(xi,X[i])
>    yi=cbind(yi,Y[i])
>  } else {
>    #If a new stand is encountered make your linear model and
>    #collect statistics
>    model<-lm(yi~xi)
>    stands[st]<-Stand[i-1]
>    intercepts[st]<-model$coefficients[1]
>    slopes[st]<-model$coefficients[2]
>    mses[st]<-sum(resid(model)^2)/(length(xi)-2)
>    ssr<-var(yi)*(length(xi)-1)-sum(resid(model)^2)
>    rsquares[st]<-ssr/(var(yi)*(length(xi)-1))
>    fRatio<-ssr/mses[st]
>    pValues[st]<-1-pf(fRatio,1,length(xi)-2)
>    #Increment the stand number, zero the within stand collections,
>    #and start again
>    st<-st+1
>    xi<-numeric(0)
>    yi<-numeric(0)
>    xi[1]=X[i]
>    yi[1]=Y[i]
>  }
>}
>#Make your data set
>standEstimates<-data.frame(standID=stands,intercept=intercepts,slop=slopes
>,mse=mses,rSquare=rsquares,pValue=pValues)
>
>The standEstimate outputs look like this:
>
>standID	intercept	slop	mse	rSquare	pValue
>1	6833	319.2470	NA	0	NA	NA
>2	756   	708.7470	NA	0	NA	NA
>3	795	        508.2290	NA	0	NA	NA
>4	1249	503.1460	NA	0	NA	NA
>5	1331	703.0620	NA	0	NA	NA
>6	1417	747.7620	NA	0	NA	NA
>7	4715	549.3400	NA	0	NA	NA
>8	4850	603.9940	NA	0	NA	NA
>9	2105	573.3270	NA	0	NA	NA
>Etc etc
>
>and I get these warnings:
>
>1: In rsquares[st] <- ssr/(var(yi) * (length(xi) - 1)) :
>  number of items to replace is not a multiple of replacement length
>2: In pValues[st] <- 1 - pf(fRatio, 1, length(xi) - 2) :
>  number of items to replace is not a multiple of replacement length
>3: In rsquares[st] <- ssr/(var(yi) * (length(xi) - 1)) :
>  number of items to replace is not a multiple of replacement length
>4: In pValues[st] <- 1 - pf(fRatio, 1, length(xi) - 2) :
>  number of items to replace is not a multiple of replacement length
>5: In rsquares[st] <- ssr/(var(yi) * (length(xi) - 1)) :
>  number of items to replace is not a multiple of replacement length
>6: In pValues[st] <- 1 - pf(fRatio, 1, length(xi) - 2) :
>  number of items to replace is not a multiple of replacement length
>7: In rsquares[st] <- ssr/(var(yi) * (length(xi) - 1)) :
>  number of items to replace is not a multiple of replacement length
>8: In pValues[st] <- 1 - pf(fRatio, 1, length(xi) - 2) :
>  number of items to replace is not a multiple of replacement length
>9: In rsquares[st] <- ssr/(var(yi) * (length(xi) - 1)) :
>  number of items to replace is not a multiple of replacement length
>10: In pValues[st] <- 1 - pf(fRatio, 1, length(xi) - 2) :
>  number of items to replace is not a multiple of replacement length
>11: In rsquares[st] <- ssr/(var(yi) * (length(xi) - 1)) :
>  number of items to replace is not a multiple of replacement length
>12: In pValues[st] <- 1 - pf(fRatio, 1, length(xi) - 2) :
>  number of items to replace is not a multiple of replacement length
>13: In rsquares[st] <- ssr/(var(yi) * (length(xi) - 1)) :
>  number of items to replace is not a multiple of replacement length
>14: In pValues[st] <- 1 - pf(fRatio, 1, length(xi) - 2) :
>etc etc
>
>Sorry if I haven't set this post out right, or haven't provided enough
>information.  But can anyone see why it is not giving me any returns for
>R^2
>etc?
>
>
>
>--
>View this message in context:
>http://r.789695.n4.nabble.com/R-looping-help-tp4667180.html
>Sent from the R help mailing list archive at Nabble.com.
>
>______________________________________________
>R-help at r-project.org mailing list
>https://stat.ethz.ch/mailman/listinfo/r-help
>PLEASE do read the posting guide
>http://www.R-project.org/posting-guide.html
>and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list