[R] Referring to objects themselves

Gabor Grothendieck ggrothendieck at gmail.com
Sun Mar 20 04:29:00 CET 2011


On Sat, Mar 19, 2011 at 9:45 PM, Russ Abbott <russ.abbott at gmail.com> wrote:
> Thanks for all the suggestions. I realize that this isn't the most important
> thing in the world -- and as a newcomer to R I gather it's not the way most
> people use R anyway.
>
> But I tried to do what looked like the simplest suggestion.
>
> open.account.2 <- function(total) {
>       this <- environment()
>       list(
>         deposit = function(amount) {
>           if(amount <= 0)
>             stop("Deposits must be positive!\n")
>           total <<- total + amount
>           cat(amount, "deposited.  Your balance is", this$balance(),
> "\n\n")
>         },
>         withdraw = function(amount) {
>           if(amount > total)
>             stop("You don't have that much money!\n")
>           total <<- total - amount
>           cat(amount, "withdrawn.  Your balance is", this$balance(),
> "\n\n")
>         },
>         balance = function() {
>           cat("Your balance is", this$total, "\n\n")
>         }
>       )
>     }
>
> When I ran it, this is what happened.
>
>> x <- open.account.2(100)
>> x$balance()
>
> Your balance is 100
>
> OK so far. But
>
>> x$deposit(50)
> Error in cat(amount, "deposited.  Your balance is", this$balance(), "\n\n")
> :
>  attempt to apply non-function
>
>
> Am I doing this the wrong way?
>
> Thanks for your interest.
>

balance is a component of the list. Its not directly a component of
this.  If you name the list you can refer to it as
this$methods$balance


open.account.2 <- function(total) {
       this <- environment()
       methods <- list(...whatever...)
 }




-- 
Statistics & Software Consulting
GKX Group, GKX Associates Inc.
tel: 1-877-GKX-GROUP
email: ggrothendieck at gmail.com



More information about the R-help mailing list