2015-07-20 7 views
0

Я хотел бы построить объект OBJECT rPOC, который я могу передать функции и заговорить позже. В приведенном ниже примере (взятом из here), я могу, конечно, построить график кривой. Но я хотел бы создать сюжет OBJECT (скажем, определяя g < - и позже строя его с графиком (g)). Кажется, что график функций ciobj, ci ниже добавит к исходному сюжету, но я не могу сделать OBJECT, собирающий эти слои вместе. Я попробовал аргумент «добавить» и создал новые объекты сюжета с возвращаемыми значениями этих функций графика.pROC участок как объект?

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

Вы действительно не можете. Эти функции используют базовую графику, которая работает, рисуя непосредственно на графическое устройство. Нет объекта, созданного, например, при работе с графикой решетки или ggplot. Почему, по-вашему, вам нужен объект? Что вы планируете с этим делать? – MrFlick

+0

, чтобы сохранить мой код как сухим, насколько это возможно. У меня есть потребность в построении различных кривых кривых (среди прочих) в разных документах, которые могут сильно измениться. Я просто создавал общие функции сюжета, которые я могу легко использовать, когда это необходимо, поэтому мне не нужно многократно повторять один и тот же код в одном файле и избегать идентичного кода в нескольких документах (документ knitr, презентация ReporteRs и т. Д.), – Joe

+1

Затем просто заверните свои команды в функцию, которую вы можете вызвать, когда вам нужно построить данные. Вместо сохранения «объектов сюжета» вы можете хранить «функции построения графика». – MrFlick

ответ

1

Как отметил г-н Флик, вы можете передавать функции вместо объекта. В качестве альтернативы вы можете передавать неоцененные вызовы функций и оценивать их в своей функции. Например:

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

Нет ограничений на то, что вы можете сделать, кроме вашего терпения с правилами оценки R.

+0

Спасибо за отзыв Калимо. Проблема в том, что мне нужна функция, которая вернет две вещи: объект сюжета и таблицу (потому что для настройки графика1,2,3 выше есть некоторое моделирование, которое возвращает дополнительный вывод, который я хочу вернуть из функции.) можно изменить свой код, чтобы у меня была функция, которую я могу использовать, чтобы вернуть 1) функцию для перехода к функции ReporteRs (addPlot (... FUN = ...)) и 2) таблицу с данными в ней to addFlexTable()? Знаю, теперь я не могу передать объект сюжета, но, может быть, список? Но я не уверен, как получить функцию в списке или если это возможно. – Joe

+0

Если ваша функция возвращает несколько вещей, они должны быть завернуты в список. Этот список может содержать что угодно, вызовы, объекты roc, таблицы и т. Д., И вы можете закодировать функцию приема, чтобы принять что-либо. Но это выходит за рамки этого самого вопроса, касающегося передачи «объектов сюжета» - мое решение для этого звонков. – Calimo

+0

Хорошо, я узнал, как это сделать, спасибо за вашу помощь. Для кого-то еще: мне не нужно было встраивать функцию или что-то в этом роде. Я просто использовал три функции графика выше (без «цитаты») в функции, а затем передал ей «объект» из другой функции, которая выполняла анализ. Я использовал эту функцию графика для генерации графика и сгенерировал roc из другой функции, в которой я передал любую другую информацию в виде списка. – Joe