为什么 surv_pvalue(或任何其他)函数在 R 中的自定义函数中不起作用?
Why does the surv_pvalue (or any other) function not work inside a custom function in R?
要为两条生存曲线之间的差异生成 p 值,我需要执行一系列繁琐的步骤,这些步骤需要对曲线的一列中表示的三个值中的两个值的所有组合进行重复起始数据框,比如 A、B 和 C 组:
# Load packages
library(survival)
library(survminer)
# Generate practice dataset
surv_time <- sample(100:200, size = 50, replace = TRUE)
surv_group <- sample(c("A", "B", "C"), size = 50, replace = TRUE)
surv_status <- rep(1, 50)
surv_data <- data.frame(Time = as.numeric(surv_time), Group = surv_group,
Status = surv_status)
# Manual for combination of groups A and B
s_data_AB <- surv_data[surv_data$Group %in% c("A", "B"), ]
s_obj_AB <- Surv(s_data_AB$Time, s_data_AB$Status)
s_curve_AB <- survfit(s_obj_AB ~ Group, data = s_data_AB)
s_pval_AB <- surv_pvalue(s_curve_AB)
s_pval_AB
这很好用,但是单独为 (A+C) 和 (B+C) 这样做很不方便。所以我尝试使用以下自定义函数自动执行此操作:
# Custom function
s_curve_fun <- function(groups_of_interest) {
s_data <- surv_data[surv_data$Group %in% groups_of_interest, ]
s_obj <- Surv(s_data$Time, s_data$Status)
s_curve <- survfit(s_obj ~ Group, data = s_data)
print(s_curve)
s_pval <- surv_pvalue(s_curve)
return(s_pval)
}
# Execute function
s_curve_fun(c("A", "B"))
这会在 print 调用工作后抛出错误,因为最后调用 surv_pvalue
函数会抛出以下错误:
Error in eval(fit$call$data) : object 's_data' not found
有趣的是,即使 survfit
也使用对象 s_data,事先调用函数 survfit 也能正常工作。当我从 s_curve_fun 导出 survfit
的输出并将其用作 surv_pvalue
的输入时,我得到了同样的错误。当我在 s_curve_fun 之外定义 s_data 时,一切正常(但显然不适用于所需的组组合)。
我很好奇为什么这不起作用以及如何解决它。如果有任何反馈,我将不胜感激!
我认为问题在于您没有按照预期的方式调用 survfit
。 Surv
-object 应该有列名,但不是其中的数据集名称。
您还需要提供 survminer::surv_pvalue
数据集作为第二个参数
尝试(适合我):
s_curve_fun <- function(groups_of_interest) {
s_data <- surv_data[surv_data$Group %in% groups_of_interest, ]
# s_obj <- Surv(s_data$Time, s_data$Status)
# Not good to build Surv object outside survfit call
# also not good to use `$data`
s_curve <- survfit( Surv(Time, Status) ~ Group, data = s_data)
print(s_curve)
# need a data object to give to surv_pvalue
s_pval <- surv_pvalue(s_curve, s_data)
return(s_pval)
}
在 survfit
调用之外使用 Surv
对象的构造并使用 $
为其提供参数 - 从函数外部的数据对象中提取搞砸了 survfit
及其相关函数期望找到它们的环境内容并进行评估。我不确定在 survfit
的调用环境之外创建 Surv
-对象的广泛但容易出错的做法是否来自。查看 surv_pvalue
的代码,我想知道该调用框架是否也存在问题。
要为两条生存曲线之间的差异生成 p 值,我需要执行一系列繁琐的步骤,这些步骤需要对曲线的一列中表示的三个值中的两个值的所有组合进行重复起始数据框,比如 A、B 和 C 组:
# Load packages
library(survival)
library(survminer)
# Generate practice dataset
surv_time <- sample(100:200, size = 50, replace = TRUE)
surv_group <- sample(c("A", "B", "C"), size = 50, replace = TRUE)
surv_status <- rep(1, 50)
surv_data <- data.frame(Time = as.numeric(surv_time), Group = surv_group,
Status = surv_status)
# Manual for combination of groups A and B
s_data_AB <- surv_data[surv_data$Group %in% c("A", "B"), ]
s_obj_AB <- Surv(s_data_AB$Time, s_data_AB$Status)
s_curve_AB <- survfit(s_obj_AB ~ Group, data = s_data_AB)
s_pval_AB <- surv_pvalue(s_curve_AB)
s_pval_AB
这很好用,但是单独为 (A+C) 和 (B+C) 这样做很不方便。所以我尝试使用以下自定义函数自动执行此操作:
# Custom function
s_curve_fun <- function(groups_of_interest) {
s_data <- surv_data[surv_data$Group %in% groups_of_interest, ]
s_obj <- Surv(s_data$Time, s_data$Status)
s_curve <- survfit(s_obj ~ Group, data = s_data)
print(s_curve)
s_pval <- surv_pvalue(s_curve)
return(s_pval)
}
# Execute function
s_curve_fun(c("A", "B"))
这会在 print 调用工作后抛出错误,因为最后调用 surv_pvalue
函数会抛出以下错误:
Error in eval(fit$call$data) : object 's_data' not found
有趣的是,即使 survfit
也使用对象 s_data,事先调用函数 survfit 也能正常工作。当我从 s_curve_fun 导出 survfit
的输出并将其用作 surv_pvalue
的输入时,我得到了同样的错误。当我在 s_curve_fun 之外定义 s_data 时,一切正常(但显然不适用于所需的组组合)。
我很好奇为什么这不起作用以及如何解决它。如果有任何反馈,我将不胜感激!
我认为问题在于您没有按照预期的方式调用 survfit
。 Surv
-object 应该有列名,但不是其中的数据集名称。
您还需要提供 survminer::surv_pvalue
数据集作为第二个参数
尝试(适合我):
s_curve_fun <- function(groups_of_interest) {
s_data <- surv_data[surv_data$Group %in% groups_of_interest, ]
# s_obj <- Surv(s_data$Time, s_data$Status)
# Not good to build Surv object outside survfit call
# also not good to use `$data`
s_curve <- survfit( Surv(Time, Status) ~ Group, data = s_data)
print(s_curve)
# need a data object to give to surv_pvalue
s_pval <- surv_pvalue(s_curve, s_data)
return(s_pval)
}
在 survfit
调用之外使用 Surv
对象的构造并使用 $
为其提供参数 - 从函数外部的数据对象中提取搞砸了 survfit
及其相关函数期望找到它们的环境内容并进行评估。我不确定在 survfit
的调用环境之外创建 Surv
-对象的广泛但容易出错的做法是否来自。查看 surv_pvalue
的代码,我想知道该调用框架是否也存在问题。