s-news
[Top] [All Lists]

Re: Code that works outside a custom function but not inside

To: "Rongsheng Liu" <rsliu@homer.att.com>
Subject: Re: Code that works outside a custom function but not inside
From: "s b" <sbmailinglist@gmail.com>
Date: Thu, 30 Oct 2008 09:19:36 -0500
Cc: s-news@lists.biostat.wustl.edu
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:to :subject:cc:in-reply-to:mime-version:content-type:references; bh=CCqEZNB9IRv0uVnQbmpJdMPEMUEgYU2ueFpPHZjwfkE=; b=Uq4Eg/IynoD9ITEcUEpIiwoRhAQSySaXX1NnZw8WuIeKTKHcN95IDTIbpgX308ykfT gLDduXwwYZtqW/7JUYQczDrDgREcruTVyU/6PpY7H50QQAFsaP92Hn9lIOsAA3lJtj6b H4AVQLf3fduruHTHBH5s2WIYC2FSaswh4QFJs=
Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:cc:in-reply-to:mime-version :content-type:references; b=IU0vrrt7jZoRUBjyLw3+5l2+EXPlKvjtz06Cp8c9ngTaijhvw8y2sjkutUy+AjiNx3 At6Qqx8V1eed/MK0sbYXP6BWVgdNldrbRe2WYhkj+bwrVmSyQOt8gZITZVMDp8C++M8D XD7g8jMiNmK5/unFwhZd2kF39PMqWVSvmkND0=
In-reply-to: <MHEMKBJBACHOJNHMBNPOOECBCFAA.rsliu@homer.att.com>
References: <29ee5dab0810300621u248c5e00j59d27a79d5b0e08@mail.gmail.com> <MHEMKBJBACHOJNHMBNPOOECBCFAA.rsliu@homer.att.com>
Hi Ron,

Thanks for your input. I have however tested my code with and without the strip function and still had the same error message:

Problem in eval(if(no.given) formula else expr[[1]],..: Object "mydata" not found

Sebastien

On Thu, Oct 30, 2008 at 10:10 AM, Rongsheng Liu <rsliu@homer.att.com> wrote:
Sebastien,
 
try to passing parameter into strip function:
           
          strip = function(which.panel, nID=nID, ...){
                        lines(c(0,1,1,0,0),c(0,0,1,1,0),col=1)
                        text(rep(0.5,nID),rep(0.5,nID),
                        paste("SD = ",mysds[which.panel],sep=""),
                        cex = 0.75)}
Thanks,
Ron

 

 

 

-----Original Message-----
From: s-news-owner@lists.biostat.wustl.edu [mailto:s-news-owner@lists.biostat.wustl.edu]On Behalf Of s b
Sent: Thursday, October 30, 2008 8:21 AM
To: s-news@lists.biostat.wustl.edu
Subject: [S] Code that works outside a custom function but not inside

Dear S-plus users,

I am trying to plot some density histograms from a data.frame of simulated data. Since I want to plot several sets of simulated data, I have created this function myhisto which supposedly should do the work. Funny thing: the code within the function does not work when the data are passed to the function, BUT it does when it is used outside of a function (see the end of the code below). Can anyone explain what I am doing wrong in my function?

Thanks you in advance,
Sebastien

PS: if anyone can also explain why the attribute which.panel does not work in strip, I would also be grateful!


############# Code starts here

# Custom functions
# Random generation of 10000 individuals for each input sd

myranddf <- function(mysds){
  nsd <- length(mysds)
  tmp <- c()
  for (i in seq(nsd)){
    tmp <- c(tmp,rnorm(10000, mean = 0, sd = mysds[i]))
  }
  mydf <- data.frame(X=tmp, SD=rep(mysds, each = 10000))
  mydf
}


# Histogram plot

myhisto <- function(mydata,nBar){

  mysds <- levels(factor(mydata[,2]))
  nID <- length(mysds)
 
  myplot <- histogram(~mydata[,1]|mydata[,2],
                      data = "">                      as.table=TRUE,
                      type = "percent",
                      nint=nBar,
                      xlim=c(0,1),
                      xlab="X",
                      ylab="Probability density",
                      layout=c(2,2),
                      main=NULL,
                      strip = function(which.panel,...){
                        lines(c(0,1,1,0,0),c(0,0,1,1,0),col=1)
                        text(rep(0.5,nID),rep(0.5,nID),
                             paste("SD = ",mysds[which.panel],sep=""),
                             cex = 0.75)},
                      key=NULL)
  print(myplot)
}

# Create data set for typical logit transform with additive variability model
# X = exp(ln(TVX/(100-TVX))+eta)/(1+exp(ln(TVX/(100-TVX))+eta))

TVX = 50
mysds = c(0.05,0.1,0.25,0.75)*TVX

mydf <- myranddf(mysds)
mydf[,1] <- exp(log(TVX/(100-TVX))+mydf[,1])
mydf[,1] <- mydf[,1]/(1+mydf[,1])

# Plotting using the function

myhisto(mydf,50)

# Plotting outside a function

mydata <- mydf
nBar <- 50

  myplot <- histogram(~mydata[,1]|mydata[,2],
                      data = "">                      as.table=TRUE,
                      type = "percent",
                      nint=nBar,
                      xlim=c(0,1),
                      xlab="X",
                      ylab="Probability density",
                      layout=c(2,2),
                      main=NULL,
                      strip = function(which.panel,...){
                        lines(c(0,1,1,0,0),c(0,0,1,1,0),col=1)
                        text(rep(0.5,4),rep(0.5,4),
                             paste("SD = ",mysds[which.panel],sep=""),
                             cex = 0.75)},
                      key=NULL)
  print(myplot)

################ END of code

<Prev in Thread] Current Thread [Next in Thread>