R - Определение функции, которая распознает аргументы не как объекты, а как часть вызова - PullRequest
0 голосов
/ 30 января 2020

Я пытаюсь определить функцию, которая возвращает графический объект в R. Идея состоит в том, что я могу затем вызвать эту функцию с разными аргументами несколько раз, используя функцию for l oop или lapply, затем построение списка grobs в gridExtra::grid.arrange. Однако я еще не дошел до этого. У меня проблемы с распознаванием аргументов как части вызова. Я сделал некоторый код, чтобы показать вам мою проблему. Я пытался заключать в кавычки и снимать кавычки аргументов, используя unqoute() в функции ( Ошибка «Объект не найден» в определенной пользователем функции, функция eval ()? ), используя eval(parse()) ( R - как отфильтровать данные со списком аргументов для получения нескольких фреймов данных и графиков ), используя !!, et c. Тем не менее, я не могу заставить его работать. Кто-нибудь знает, как мне справиться с этим?

library(survminer)
library(survival)

data_km <- data.frame(Duration1 = c(1,2,3,4,5,6,7,8,9,10),
                      Event1 = c(1,1,0,1,1,0,1,1,1,1),
                      Duration2 = c(1,1,2,2,3,3,4,4,5,5),
                      Event2 = c(1,0,1,0,1,1,1,0,1,1),
                      Duration3 = c(11,12,13,14,15,16,17,18,19,20),
                      Event3 = c(1,1,0,1,1,0,1,1,0,1),
                      Area = c(1,1,1,1,1,2,2,2,2,2))

# this is working perfectly
ggsurvplot(survfit(Surv(Duration1, Event1) ~ Area, data = data_km))
ggsurvplot(survfit(Surv(Duration2, Event2) ~ Area, data = data_km))
ggsurvplot(survfit(Surv(Duration3, Event3) ~ Area, data = data_km))

myfun <- function(TimeVar, EventVar){
  ggsurvplot(survfit(Surv(eval(parse(text = TimeVar), eval(parse(text = EventVar)) ~ Area, data = data_km))
}

x <- myfun("Duration1", "Event1")
plot(x)

1 Ответ

2 голосов
/ 30 января 2020

Вам необходимо изучить некоторые учебники по вычислениям на языке. Мне нравится делать это с базой R, например, используя bquote.

myfun <- function(TimeVar, EventVar){
  TimeVar <- as.name(TimeVar)
  EventVar <- as.name(EventVar) 

  fit <- eval(bquote(survfit(Surv(.(TimeVar), .(EventVar)) ~ Area, data = data_km)))
  ggsurvplot(fit)
}

x <- myfun("Duration1", "Event1")
print(x)
#works
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...