Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 作为对象的过程图?_R_Plot_Ggplot2_Roc_Proc R Package - Fatal编程技术网

R 作为对象的过程图?

R 作为对象的过程图?,r,plot,ggplot2,roc,proc-r-package,R,Plot,Ggplot2,Roc,Proc R Package,我想构造一个rPOC plot对象,我可以将其传递给函数并在以后进行打印。在下面的示例中(取自),我当然可以绘制roc曲线。但是我想创建一个plot对象(比如,通过定义MrFlick提到的g,您可以传递函数而不是对象。或者,您可以传递未赋值的函数调用,并在函数中对其求值。例如: library(pROC) data(aSAH) plot1 <- quote(plot(rocobj, main="Confidence intervals", print.auc=TRUE)) plot2

我想构造一个rPOC plot对象,我可以将其传递给函数并在以后进行打印。在下面的示例中(取自),我当然可以绘制roc曲线。但是我想创建一个plot对象(比如,通过定义MrFlick提到的g,您可以传递函数而不是对象。或者,您可以传递未赋值的函数调用,并在函数中对其求值。例如:

library(pROC)
data(aSAH)


plot1 <- quote(plot(rocobj, main="Confidence intervals", print.auc=TRUE))
plot2 <- quote(plot(ci.se(rocobj, 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) {
    eval(call)
  }
  invisible(rocobj)
}

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))
库(pROC)
数据(aSAH)

plot1你真的不能。这些函数使用基本图形,直接绘制到图形设备上。没有像使用晶格或ggplot图形那样创建的对象。你认为你为什么需要一个对象?你打算用它做什么?以尽可能保持我的代码干燥。我需要绘制不同的roc曲线我只是创建了一个通用的绘图函数,在需要时可以方便地使用,这样我就不必在一个文件中多次重复类似的代码,并避免在多个文档中重复相同的代码(knitr文档、“记者”演示等)然后,只需将命令封装在需要打印数据时可以调用的函数中。您可以存储“打印函数”,而不是存储“打印对象”。Paul Murrell(grid pkg的作者)最近推出了一个软件包这可能是这样的。IIRC,pkg的名称是gridSVG,它试图从一个基本图形调用构造一个SVG文件。然后(我想)您可以导入该文件以进行进一步的操作。MrFlick:谢谢。我想问题在于添加绘图的ReporteRs包(在我的例子中是addImage),不捕捉我添加到绘图中的“层”(上面的最后两个绘图状态)。可能是我做错了什么,也可能是包本身,但即使它在rstudio中绘制得很好,我也会丢失这些层。但也许我只需要更深入地挖掘包BondedDust:谢谢,我会查看它的响应Calimo。问题是我想要一个能返回两个东西的函数:plot对象和一个表(因为要设置上面的plot1,2,3,有一些建模会返回我想从函数返回的额外输出。)是否可以修改您的代码,这样我就可以使用一个函数来返回一个1)要传递给ReporteRs函数的函数(addPlot(…FUN=…),以及2)要传递给addFlexTable()的包含数据的表?我现在知道我不能传递plot对象,但可能是列表?但我不确定如何在列表中获取函数,或者是否可能。如果函数返回多个内容,则必须将它们包装在列表中。该列表可以包含任何内容、调用、roc对象、表等,您可以对接收函数进行编码以接受任何内容。但这超出了传递“绘图对象”这个问题的范围——我的解决方案是调用。好的,我知道了怎么做,谢谢你的帮助。对于其他人:我不需要嵌套函数或类似的东西。我只是在一个函数中使用了上面的三个plot函数(不带引号),然后从进行分析的另一个函数向它传递了一个roc“object”。我使用这个plot函数生成plot,并从另一个函数生成roc,在该函数中,我将任何其他信息作为列表传递。
library(pROC)
data(aSAH)


plot1 <- quote(plot(rocobj, main="Confidence intervals", print.auc=TRUE))
plot2 <- quote(plot(ci.se(rocobj, 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) {
    eval(call)
  }
  invisible(rocobj)
}

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))