Joe Joe - 9 months ago 56
R Question

pROC plot as object?

I would like to construct a rPOC plot OBJECT that I can pass to a function and plot later. In the example below (taken from here), I can certainly plot my roc curve. But I would like to create a plot OBJECT (say by defining g <- and later plotting it with plot(g)). It seems that the plot of ciobj, ci functions below will add to the original plot, but I can't make an OBJECT assembling these layers together. I have tried the 'add' argument, and creating new plot objects with the return values of these plot functions.

rocobj <- plot.roc(aSAH$outcome, aSAH$s100b, main="Confidence intervals", percent=TRUE, ci=TRUE, print.auc=TRUE)
ciobj <-, specificities=seq(0, 100, 5))
plot(ciobj, type="shape", col="#1c61b6AA")
plot(ci(rocobj, of="thresholds", thresholds="best"))

Answer Source

As MrFlick mentioned you can pass functions instead of object. Alternatively you can pass unevaluated function calls, and evaluate them within your function. For instance:


plot1 <- quote(plot(rocobj, main="Confidence intervals", print.auc=TRUE))
plot2 <- quote(plot(, specificities=seq(0, 100, 5)), type="shape", col="#1c61b6AA"))
plot3 <- quote(plot(ci(rocobj, of="thresholds", thresholds="best")))

doplots <- function(rocobj, calls) {
  for (call in calls) {

roc1 <- roc(aSAH$outcome, aSAH$s100b, percent = TRUE)
doplots(roc1, list(plot1, plot2, plot3))

roc2 <- roc(aSAH$outcome, aSAH$wfns, percent = TRUE)
doplots(roc2, list(plot1, plot3))

There is no limit to what you can do, except your patience with R's evaluation rules.