--- Jason Barnhart <[EMAIL PROTECTED]> wrote: > The problem isn't the function call. > > First, list1 returned by lstfun does not name its > elements so nts$cda > won't work. See code change in lstfun.
I missed that entirely. I was groggier than I realised yesterday afternoon. I had at least once left nts in existance in the same environment where ukn is called, thus getting an intermitant error. In that environment nts$cda was named! > > Second, specifying nts$cda as the nam1 argument > tells R to look for > the nts object in the environment in which ukn is > called. However, > the nts object is not created in the parent > environment, it is created > in the ukn's environment. Yes. I had already tried calling it within the ukn environment not realising that I had not named the elements so this was my last try. > > Third, nam1[,3] should be nam1[2] as there is no > third element to this > list (although and this doesn't resolve the > environment issue). Oops, typo when creating the simple example. Sorry. > > I've modified your code below to work, but there are > better ways to go > about this. Thomas Lumley has a famous quote > regarding parse. See > http://tolstoy.newcastle.edu.au/R/e2/help/07/01/8059.html > among others. > > I was once referred to Patrick Burns' S Poetry to > learn about the > "eval(parse(text=)))" paradigm which was very > helpful. You may also > want to brush up on environments (see ?environment) > to learn more > about lexical scoping. > > Hope this helps. > -jason This has been very helpful though I still do not understand why one must call nts$cda using the eval(parse()) command. Is it because nts is created within the ukn environment? I have had a look at S-Poetry but will need to spend a lot more time on this. I thought that this was not the best way to do things but I wanted to avoid doing a lot of earlier manipulations to my data files and so decided to go with what I had. > > #MODIFIED CODE > # create data.frame > cata <- c( 1,1,6,1,1,4) > catb <- c( 1,2,3,4,5,6) > id <- c('a', 'b', 'b', 'a', 'a', 'b') > dd1 <- data.frame(id, cata,catb) > > # function to create list from data.frame > lstfun <- function(file, alpha , beta ) { > cda <- subset(file, file[,1] == alpha) > cdb <- subset (file, file[,1]== beta) > ### CODE ADDED HERE > list1 <- list(cda=cda,cdb=cdb) > } > > # funtion to operate on list > ukn <- function(file, alpha, beta, nam1){ > aa <- alpha > bb <- beta > myfile <- file > nts <- lstfun(myfile, aa, bb) > ### CODE ADDED HERE > mysum <- eval(parse(text=nam1)) > #mysum <- nam1[,3]*5 > return(mysum) > } > > results <- ukn(dd1, "a", "b", "nts$cda") ### > modified how called. > > ----- Original Message ----- > From: "John Kane" <[EMAIL PROTECTED]> > To: "R R-help" <[email protected]> > Sent: Thursday, June 28, 2007 12:03 PM > Subject: [R] Function call within a function. > > > >I am trying to call a funtion within another > function > > and I clearly am misunderstanding what I should > do. > > Below is a simple example. > > I know lstfun works on its own but I cannot seem > to > > figure out how to get it to work within ukn. > Basically > > I need to create the variable "nts". I have > probably > > missed something simple in the Intro or FAQ. > > > > Any help would be much appreciated. > > > > EXAMPLE > > > ------------------------------------------------------------------------------- > > # create data.frame > > cata <- c( 1,1,6,1,1,4) > > catb <- c( 1,2,3,4,5,6) > > id <- c('a', 'b', 'b', 'a', 'a', 'b') > > dd1 <- data.frame(id, cata,catb) > > > > # function to create list from data.frame > > lstfun <- function(file, alpha , beta ) { > > cda <- subset(file, file[,1] == alpha) > > cdb <- subset (file, file[,1]== beta) > > list1 <- list(cda,cdb) > > } > > > > # funtion to operate on list > > ukn <- function(file, alpha, beta, nam1){ > > aa <- alpha > > bb <- beta > > myfile <- file > > nts <- lstfun(myfile, aa, bb) > > mysum <- nam1[,3]*5 > > return(mysum) > > } > > > > results <- ukn(dd1, "a", "b", nts$cda) > > > > ______________________________________________ > > [email protected] 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. > > > > ______________________________________________ [email protected] 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.
