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

______________________________________________
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.

Reply via email to