# [R] Equations as arguments to functions

Michaell Taylor pols1oh at bestweb.net
Tue Nov 27 22:34:55 CET 2001

```I am trying to pass an equation as an arguement to a function, which seems
pretty straightforward given lazy evaluation.

I constructed the following little test to make sure I sort of knew what I
was doing:

go <- function(X,eq) { C <<- X*2; d <<- eq}
a _ rnorm(100)
go(10,eq=a[.5*length(a)]+C+1)
> C
 20
> d
 21.10551
> a[.5*length(a)]
 0.1055086

Everything looks good - (BTW seems like a really powerful feature of R)

Now on to my code of interest, which doesn't work (shown below).

rm(list=ls())
increments _ seq(5000,100000,by=5000)
makeindex <- function(Y,eq) {
losers _ 0; levels_0
index _ 0; location _ 0; cutoff _0; totalapt_0; houses_0
for (C in city[1:2]) {
counter _ 0
if (file.exists(paste("datasets/2000income/",C,sep=""))) {
counter _ counter+1}
if (file.exists(paste("datasets/rents/2000",toupper(C),sep=""))) {
counter _ counter+1}
if (counter== 2) {
totrent _ 0
totrent _ rep(rent,units)
totrent _ totrent[!is.na(totrent)]
income2000 _ sort(income2000)
print(C)
print(length(income2000))  # for debugging   - notice this works fine
print(ls())                 # for debugging    - notice this works fine
level _ eq		 # FAILURE POINT
print(level)
maxrent _ level/12*Y
tot _ length(totrent[totrent<=maxrent])/length(totrent)
house _ length(income2000[income2000<=level])/length(income2000)
location _ c(location,C)
index _ c(index,tot)
cutoff _ c(cutoff,maxrent)
totalapt _ c(totalapt,length(totrent))
levels _ c(levels,level)
houses _ c(houses,house)
}
if (counter<2) {losers _ cat(losers,C)}
}
overall _ data.frame(location,levels,index,houses,cutoff,totalapt)
overall <<- overall[-1,]
print(overall)
losers <<- losers[-1]
rm("overall","losers","level","maxrent")
}
makeindex(.35,eq=(income2000[.33*length(income2000)]))

***************  GIVES ********************

> source("finalindex.R")
 "At"
 1459919
 "C"          "counter"    "cutoff"     "eq"         "houses"
 "income2000" "index"      "levels"     "location"   "losers"
 "rent"       "totalapt"   "totrent"    "units"      "Y"
 "yr"

Ummm. I see it in the list which immediately preceded it.

Please notice that I put a ls() in this function just prior to the calling of
eq so as to verify that income2000 is indeed "found".

while,

makeindex(.35,eq=(20000*.9))

works fine.

This smells like a "I am an idiot" sort of problem.  I must be missing
something simple.  Thanks for any help  - BTW sorry for the long post, trying
to give sufficient data.

=========================================
Michaell Taylor, PhD
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._

```