[R] Function to save plots

Joshua Wiley jwiley.psych at gmail.com
Wed Jun 1 22:26:10 CEST 2011


Hi Merik,

I believe this does what you want (and maybe a little more):

## define the function, a1 and a2 correspond to your arguments
## d is the directory to save the file in (by default the working directory)
## ... are additional arguments that can be passed to png() to control
things like quality, etc.
roc <- function(a1, a2, d = getwd(), ...) {

## someone wiser may know a better way, but I put dev.off() into
on.exit() because
## otherwise, if the plot fails (say due to an error in prediction()
or performance())
## the device does not get shutdown otherwise, and the image is empty
but still used by R
  on.exit(dev.off())

## I use get() to deal with the fact that the dataset name is passed
as a character
  dat <- get(a1)

  png(filename = paste(d, "/", a1, "_", a2, ".png", sep = ''), ...)
  plot(performance(prediction(dat[, a2], dat[, "goldstandard"]),
    "tpr", "fpr"))
## I like titles (if you don't need it, just delte this line)
  title(main = paste(a2, "in dataset:", a1))
}


## Test dataset
test1 <- data.frame(method1 = rbinom(40, 1, .4),
  method2 = rbinom(40, 1, .4), goldstandard = rbinom(40, 1, .8))


## Example Usage
roc(a1 = "test1", a2 = "method1")
roc(a1 = "test1", a2 = "method1", d = "DRIVE:/AlternatePath")
roc(a1 = "test1", a2 = "method1", width = 960, height = 960)

Hope this helps,

Josh

On Wed, Jun 1, 2011 at 12:39 PM, Merik Nanish <merik.nanish at gmail.com> wrote:
> Hello,
>
> I'm using ROCR to plot ROC Curves and I want to automate the saving of plots
> into PNG files using a custom function.
>
> My data frames are named like test1, test2, test3. Each data frame has three
> variables: method1, method2, goldstandard.
>
> Right now, for each plot I have to run:
>
> png('test1_method1.png')
> plot(performance(prediction(test1$method1, test1$goldstandard), "tpr",
> "fpr"))
> dev.off()
>
> Here is the function I tried to create but I failed:
>
> roc <- function(arg1, arg2){
>  png(paste(arg1, arg2, "png", sep="_"))
>  plot(performance(prediction(arg1$arg2, arg1$goldstandard), "tpr", "fpr"))
>  dev.off()
> }
>
> I wanted to pass the test name as arg1, and the method name as arg2. Here
> are my problems:
>
> 1) arg1$arg2 causes an error message. How can I use a function argument to
> address a variable in a dataframe?
>
> 2) paste(arg1, arg2, "png", sep=".") doesn't output something like
> 'test1.method1.png'. How should I deal with that?
>
> Thanks in advance.
>
>        [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org 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.
>



-- 
Joshua Wiley
Ph.D. Student, Health Psychology
University of California, Los Angeles
http://www.joshuawiley.com/



More information about the R-help mailing list