R - 定义一个函数,该函数不将参数识别为对象,而是作为调用的一部分
R - Defining a function which recognises arguments not as objects, but as being part of the call
我试图在 R 中定义一个 returns 图形对象的函数。我的想法是,我可以使用 for
循环或 lapply
函数,然后在 gridExtra::grid.arrange
中绘制 grobs
的列表。但是,我还没有走到那一步。我在 r 将参数识别为调用的一部分时遇到了问题。我已经编写了一些代码来向您展示我的问题。我试过引用和取消引用参数,在函数中使用 unqoute()
("Object not found" error within a user defined function, eval() function?), using eval(parse())
(),使用 !!
,等等。但是,我似乎无法让它工作。有谁知道我该如何处理?
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)
你需要学习一些关于语言计算的教程。我喜欢用 base 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
我试图在 R 中定义一个 returns 图形对象的函数。我的想法是,我可以使用 for
循环或 lapply
函数,然后在 gridExtra::grid.arrange
中绘制 grobs
的列表。但是,我还没有走到那一步。我在 r 将参数识别为调用的一部分时遇到了问题。我已经编写了一些代码来向您展示我的问题。我试过引用和取消引用参数,在函数中使用 unqoute()
("Object not found" error within a user defined function, eval() function?), using eval(parse())
(!!
,等等。但是,我似乎无法让它工作。有谁知道我该如何处理?
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)
你需要学习一些关于语言计算的教程。我喜欢用 base 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