[R] help with functions

jonas garcia
Fri, 04 Sep 2009 14:00:57 -0000

Hi all,



I have got 2 function (see bellow) which are simplifications of what I need
to do. These functions are precisely the same, except for the last line.



My question is, why doesn't function testA work in the same way as function
testB.

Both functions produce two objects, "a" and "b" that must
merged with rbind.
The difference is that in testA, I specify the name of the objects while in
testA I am stating which objects I want to bind from a character vector.



What's more, if I just run the code without a function (example given below
as well), they both work...

Why is this?



Thanks in advance



Jonas





testA<-function(input)

{

      dat<- data.frame(A=seq(input,5), B=seq(6,10))

      vec.names<- c("a", "b")

      for(i in 1:ncol(dat))

      {

            tab<- dat[,i]-1

            assign(vec.names[i], tab)

      }



      do.call("rbind", lapply(vec.names, get))

}







testB<-function(input)

{

      dat<- data.frame(A=seq(input,5), B=seq(6,10))

      vec.names<- c("a", "b")

      for(i in 1:ncol(dat))

      {

            tab<- dat[,i]-1

            assign(vec.names[i], tab)

      }



      rbind(a,b)

}







testA(1)

Error in FUN(c("a", "b")[[1L]], ...) : object 'a'
not found



testB(1)

  [,1] [,2] [,3] [,4] [,5]

a    0    1    2    3    4

b    5    6    7    8    9







###################################################################################







      dat<- data.frame(A=seq(1,5), B=seq(6,10))

      vec.names<- c("a", "b")

      for(i in 1:ncol(dat))

      {

            tab<- dat[,i]-1

            assign(vec.names[i], tab)

      }



      do.call("rbind", lapply(vec.names, get))

     [,1] [,2] [,3] [,4] [,5]

[1,]    0    1    2    3    4

[2,]    5    6    7    8    9









dat<- data.frame(A=seq(1,5), B=seq(6,10))

      vec.names<- c("a", "b")

      for(i in 1:ncol(dat))

      {

            tab<- dat[,i]-1

            assign(vec.names[i], tab)

      }



      rbind(a,b)

  [,1] [,2] [,3] [,4] [,5]

a    0    1    2    3    4

b    5    6    7    8    9

	[[alternative HTML version deleted]]