0

for我正在尝试定义一个在 R 中返回图形对象的函数。我的想法是,然后我可以使用循环或函数多次使用不同的参数调用此函数lapply,然后绘制grobsin的列表gridExtra::grid.arrange。但是,我还没有走到那一步。我无法将 r 识别为调用的一部分。我已经编写了一些代码来向您展示我的问题。我尝试引用和取消引用参数,unqoute()在函数中使用(用户定义函数中的“找不到对象”错误,eval()函数?),使用eval(parse())R - 如何使用参数列表过滤数据以生成多个数据框架和图表),使用!!等。但是,我似乎无法让它工作。有谁知道我应该如何处理这个?

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

1 回答 1

3

你需要学习一些关于语言计算的教程。我喜欢用基础 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
于 2020-01-30T13:34:02.640 回答