1

要为两条生存曲线之间的差异生成 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 可以正常工作,即使survfit也使用对象 s_data。当我survfit从 s_curve_fun 导出输出并将其用作 的输入时surv_pvalue,我得到了同样的错误。当我在 s_curve_fun 之外定义 s_data 时,一切正常(但显然不适用于所需的组组合)。

我很想知道为什么这不起作用以及如何解决它。我将不胜感激任何反馈!

4

1 回答 1

1

我认为问题在于你没有survfit按照预期的方式打电话。-objectSurv应该包含列名,但不能包含数据集名称。

您还需要提供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)
   }

Surv在调用之外使用 -objects 的构造并使用-extraction 从函数外部的数据对象中为其提供参数,这会搞砸及其相关函数期望在哪里survfit找到它们的环境内容并进行评估。我不确定在调用环境之外创建 -objects 的广泛但容易出错的做法是否来自。查看 的代码,我想知道这是否也可能是该调用框架中的问题。$survfitSurvsurvfitsurv_pvalue

于 2021-11-10T01:00:03.567 回答