Don, that was great - thanks so much! ...and you are right rbind() being expensive, but my dataframe will always stay that small (max. twice as large).
Chaehan On Thu, Feb 11, 2010 at 4:50 PM, Don MacQueen <m...@llnl.gov> wrote: > You have a mistake in how you're setting up the object named "result" > before the loop. > > You set result <- latentVariableNames. It is a vector of length 6, when you > call the function with LV. The printout from the first iteration shows this. > > But then you rbind result with a data frame that has three columns. These > are basically incompatible, but R (apparently silently) wraps the vector of > length 6 into two rows of three columns. > > Here's an example: > > foo <- letters[1:6] >> names(foo) <- c('a','b','c') >> foo >> > a b c <NA> <NA> <NA> > "a" "b" "c" "d" "e" "f" > > rbind(foo, data.frame(a='X', b='Y', c='Z',stringsAsFactors=FALSE)) >> > a b c > 1 a b c > 2 X Y Z > > What I would do is something like this (untested): > > loopCronbach <- function(latentVariableNames, groupingVariable) { > n <- length(latentVariableNames) > tmp1 <- tmp2 <- numeric(n) > > for (i in 1:n) { > tmp1[i] <- calculateIndividualCronbach(get(latentVariableNames[i])) > tmp2[i] <- calculateGroupCronbach(get(latentVariableNames[i]), > groupingVariable) > } > > result <- > data.frame(latentVariable=latentVariableNames,Indiv=tmp1,Group=tmp2) > > names(result) <- c("latentVariable", "Indiv", "Group") > result ## no need to use return() > } > > Building up a dataframe row by row using rbind() is in general an expensive > way to do things -- although in this instance it's such a small dataframe > that it doesn't matter. > > -Don > > > At 10:56 AM +0100 2/11/10, Chaehan So wrote: > >> Ok, you're right - may I rephrase: >> How should I modify the assignment of result <- latentVariableNames >> so it produces the output without the first line? >> I thought result <- NULL should do the job, but it didn't because of the >> following names(result) assignment (which I understand, but not how I >> can workaround it). >> >> Here's the output and code again: >> >> latentVariable Indiv Group >> 1 rPlanning rIterat rTDD >> 2 rPlanning 0.79 0.84 >> 3 rIterat 0.79 0.83 >> 4 rTDD 0.9 0.96 >> 5 rStandup 0.83 0.82 >> 6 rRetros 0.9 0.95 >> 7 rAccess 0.91 0.92 >> 8 rAccTest 0.87 0.9 >> >> ##### >> LV <- c("rPlanning", "rIterat", "rTDD", "rStandup", "rRetros", "rAccess", >> "rAccTest") >> ##### >> loopCronbach <- function(latentVariableNames, groupingVariable) >> { >> result <- latentVariableNames >> names(result) <- c("latentVariable", "Indiv", "Group") >> for (currentName in latentVariableNames) >> { >> print(currentName) >> print(result) >> tmp1 <- calculateIndividualCronbach(get(currentName)) >> tmp2 <- calculateGroupCronbach(get(currentName), groupingVariable) >> result <- rbind(result,data.frame(latentVariable=currentName, >> Indiv=tmp1,Group=tmp2)) >> } >> return(result) >> } >> >> On Thu, Feb 11, 2010 at 3:31 AM, jim holtman <jholt...@gmail.com> wrote: >> >> It doing exactly what you asked it to do. You have the assignment: >>> >>> result <- latentVariableNames >>> >>> and then you print it out in the loop. What were you expecting? >>> >>> On Wed, Feb 10, 2010 at 9:06 PM, Chaehan So <chaehan...@gmail.com> >>> wrote: >>> >> > > Dear r-helpers, >> > > >> > > why do I get an output in the first iteration of the for-loop >> > > which contains the string values of the input vector, >> > > and how can I avoid that? >> >>> > >>> > Here's the output (only line 1 is wrong) >>> > >>> > latentVariable Indiv Group >>> > 1 rPlanning rIterat rTDD >>> > 2 rPlanning 0.79 0.84 >>> > 3 rIterat 0.79 0.83 >>> > 4 rTDD 0.9 0.96 >>> > 5 rStandup 0.83 0.82 >>> > 6 rRetros 0.9 0.95 >>> > 7 rAccess 0.91 0.92 >>> > 8 rAccTest 0.87 0.9 >>> > >>> > ##### >>> > LV <- c("rPlanning", "rIterat", "rTDD", "rStandup", "rRetros", >>> "rAccess", >>> > "rAccTest") >>> > ##### >>> > loopCronbach <- function(latentVariableNames, groupingVariable) >>> > { >>> > result <- latentVariableNames >>> > names(result) <- c("latentVariable", "Indiv", "Group") >>> > for (currentName in latentVariableNames) >>> > { >>> > print(currentName) >>> > print(result) >>> > tmp1 <- calculateIndividualCronbach(get(currentName)) >>> >> > > tmp2 <- calculateGroupCronbach(get(currentName), groupingVariable) >> >>> > result <- rbind(result,data.frame(latentVariable=currentName, >>> > Indiv=tmp1,Group=tmp2)) >>> > } >>> > return(result) >>> > } >>> > >>> > >>> > a <- loopCronbach(LV, u_proj) >>> > >>> > [[alternative HTML version deleted]] >>> > >>> > ______________________________________________ >>> > R-help@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. >>> > >>> >>> >>> >>> -- >>> Jim Holtman >>> Cincinnati, OH >>> +1 513 646 9390 >>> >>> What is the problem that you are trying to solve? >>> >>> >> >> >> -- >> Humboldt University Berlin, Germany >> Institute of Psychology >> Rudower Chaussee 18, Room 1221 >> 12489 Berlin >> Germany >> Office: +49 30 2093 - 9337 >> Mobile: +49 171- 626 9373 >> >> [[alternative HTML version deleted]] >> >> ______________________________________________ >> R-help@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. >> > > > -- > -------------------------------------- > Don MacQueen > Environmental Protection Department > Lawrence Livermore National Laboratory > Livermore, CA, USA > 925-423-1062 > -------------------------------------- > -- Humboldt University Berlin, Germany Institute of Psychology Rudower Chaussee 18, Room 1221 12489 Berlin Germany Office: +49 30 2093 - 9337 Mobile: +49 171- 626 9373 Sent from Berlin, BE, Germany [[alternative HTML version deleted]] ______________________________________________ R-help@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.