如何正确地限定 R 中数据框的范围以与函数中的公式一起使用
How to correctly scope a dataframe in R to use with a formula in a function
经过一些挖掘 (1, 2, ),似乎有几篇关于在函数中使用公式会导致范围界定问题的帖子,如果我理解正确的话。有些人建议使用环境、分配或 <<-
来解决这个问题,但我一直对如何使用它们感到困惑(并且困惑为什么首先会出现问题)。
让我们试试这个玩具代码:
library(survival)
library(survminer)
set.seed(1)
give_p_val <- function() {
df <- data.frame('OS' = ovarian[, 'futime'], 'Survival_event' = ovarian[, 'fustat'])
subgroup <- sample(nrow(df), nrow(df)/2)
df$Class <- 'A'
df$Class[subgroup] <- 'B'
fit2 <- survfit(Surv(OS, Survival_event) ~ Class, data=df)
return(surv_pvalue(fit2))
}
give_p_val( )
它不起作用,除非您直接 运行 它,这暗示了范围问题。
此代码适用于 return 合适的对象:
survfit(Surv(futime, fustat) ~ rx, data=ovarian)
那么,如果我们在范围内复制数据帧,为什么函数会中断?
testit<-function(){
ovarian2 <- ovarian
fit2 <- survfit(Surv(futime, fustat) ~ rx, data=ovarian2)
return(surv_pvalue(fit2))
}
testit()
最终,我如何在函数内生成一个数据框,以便由所使用的公式正确处理?
谢谢!
这是 survminer
包中的一个 known issue,以及 surv_pvalue
如何与 survfit
对象交互。如果您将 survfit
更改为 survminer
包的版本 surv_fit
,您的功能将正常工作。
give_p_val <- function() {
df <- data.frame('OS' = ovarian[, 'futime'], 'Survival_event' = ovarian[, 'fustat'])
subgroup <- sample(nrow(df), nrow(df)/2)
df$Class <- 'A'
df$Class[subgroup] <- 'B'
fit2 <- surv_fit(Surv(OS, Survival_event) ~ Class, data=df)
surv_pvalue(fit2, data = df)
}
give_p_val( )
# variable pval method pval.txt
# 1 Class 0.2615363 Log-rank p = 0.26
经过一些挖掘 (1, 2, <<-
来解决这个问题,但我一直对如何使用它们感到困惑(并且困惑为什么首先会出现问题)。
让我们试试这个玩具代码:
library(survival)
library(survminer)
set.seed(1)
give_p_val <- function() {
df <- data.frame('OS' = ovarian[, 'futime'], 'Survival_event' = ovarian[, 'fustat'])
subgroup <- sample(nrow(df), nrow(df)/2)
df$Class <- 'A'
df$Class[subgroup] <- 'B'
fit2 <- survfit(Surv(OS, Survival_event) ~ Class, data=df)
return(surv_pvalue(fit2))
}
give_p_val( )
它不起作用,除非您直接 运行 它,这暗示了范围问题。
此代码适用于 return 合适的对象:
survfit(Surv(futime, fustat) ~ rx, data=ovarian)
那么,如果我们在范围内复制数据帧,为什么函数会中断?
testit<-function(){
ovarian2 <- ovarian
fit2 <- survfit(Surv(futime, fustat) ~ rx, data=ovarian2)
return(surv_pvalue(fit2))
}
testit()
最终,我如何在函数内生成一个数据框,以便由所使用的公式正确处理? 谢谢!
这是 survminer
包中的一个 known issue,以及 surv_pvalue
如何与 survfit
对象交互。如果您将 survfit
更改为 survminer
包的版本 surv_fit
,您的功能将正常工作。
give_p_val <- function() {
df <- data.frame('OS' = ovarian[, 'futime'], 'Survival_event' = ovarian[, 'fustat'])
subgroup <- sample(nrow(df), nrow(df)/2)
df$Class <- 'A'
df$Class[subgroup] <- 'B'
fit2 <- surv_fit(Surv(OS, Survival_event) ~ Class, data=df)
surv_pvalue(fit2, data = df)
}
give_p_val( )
# variable pval method pval.txt
# 1 Class 0.2615363 Log-rank p = 0.26