从字符串创建公式调用
Create formula call from character string
我使用最佳子集选择包来确定构建模型的最佳自变量(我这样做有特定原因而不是直接使用最佳子集对象)。我想以编程方式提取特征名称并使用生成的字符串来构建我的模型公式。结果将是这样的:
x <- "x1 + x2 + x3"
y <- "Surv(time, event)"
因为我正在构建一个coxph
模型,公式如下:
coxph(Surv(time, event) ~ x1 + x2 + x3)
使用这些字符串字段,我尝试构建如下公式:
form <- y ~ x
这会创建一个 class formula
的对象,但是当我调用 coxph
时,它不会根据从公式对象创建的引用进行计算。我收到以下错误:
Error in model.frame.default(formula = y ~ x) : object is not a matrix
如果我在 coxph
调用中对对象 y 和 x 调用 eval
,我会得到以下结果:
Error in model.frame.default(formula = eval(y) ~ eval(x), data = df) :
可变长度不同(为 'eval(x)' 找到)
我不太确定如何进行。感谢您的输入。
找不到好的骗子,所以发表评论作为答案。
如果您将完整公式构建为字符串,包括 ~
,您可以在其上使用 as.formula
,例如,
x = "x1 + x2 + x3"
y = "Surv(time, event)"
form = as.formula(paste(y, "~", x))
coxph(form, data = your_data)
对于可重现的示例,请考虑 ?coxph
帮助页面底部的第一个示例:
library(survival)
test1 <- list(time=c(4,3,1,1,2,2,3),
status=c(1,1,1,0,1,1,0),
x=c(0,2,1,1,1,0,0),
sex=c(0,0,0,0,1,1,1))
# Fit a stratified model
coxph(Surv(time, status) ~ x + strata(sex), test1)
# Call:
# coxph(formula = Surv(time, status) ~ x + strata(sex), data = test1)
#
# coef exp(coef) se(coef) z p
# x 0.802 2.231 0.822 0.98 0.33
#
# Likelihood ratio test=1.09 on 1 df, p=0.3
# n= 7, number of events= 5
lhs = "Surv(time, status)"
rhs = "x + strata(sex)"
form = as.formula(paste(lhs, "~", rhs))
form
# Surv(time, status) ~ x + strata(sex)
## formula looks good
coxph(form, test1)
# Call:
# coxph(formula = form, data = test1)
#
# coef exp(coef) se(coef) z p
# x 0.802 2.231 0.822 0.98 0.33
同样的结果。
我使用最佳子集选择包来确定构建模型的最佳自变量(我这样做有特定原因而不是直接使用最佳子集对象)。我想以编程方式提取特征名称并使用生成的字符串来构建我的模型公式。结果将是这样的:
x <- "x1 + x2 + x3"
y <- "Surv(time, event)"
因为我正在构建一个coxph
模型,公式如下:
coxph(Surv(time, event) ~ x1 + x2 + x3)
使用这些字符串字段,我尝试构建如下公式:
form <- y ~ x
这会创建一个 class formula
的对象,但是当我调用 coxph
时,它不会根据从公式对象创建的引用进行计算。我收到以下错误:
Error in model.frame.default(formula = y ~ x) : object is not a matrix
如果我在 coxph
调用中对对象 y 和 x 调用 eval
,我会得到以下结果:
Error in model.frame.default(formula = eval(y) ~ eval(x), data = df) :
可变长度不同(为 'eval(x)' 找到)
我不太确定如何进行。感谢您的输入。
找不到好的骗子,所以发表评论作为答案。
如果您将完整公式构建为字符串,包括 ~
,您可以在其上使用 as.formula
,例如,
x = "x1 + x2 + x3"
y = "Surv(time, event)"
form = as.formula(paste(y, "~", x))
coxph(form, data = your_data)
对于可重现的示例,请考虑 ?coxph
帮助页面底部的第一个示例:
library(survival)
test1 <- list(time=c(4,3,1,1,2,2,3),
status=c(1,1,1,0,1,1,0),
x=c(0,2,1,1,1,0,0),
sex=c(0,0,0,0,1,1,1))
# Fit a stratified model
coxph(Surv(time, status) ~ x + strata(sex), test1)
# Call:
# coxph(formula = Surv(time, status) ~ x + strata(sex), data = test1)
#
# coef exp(coef) se(coef) z p
# x 0.802 2.231 0.822 0.98 0.33
#
# Likelihood ratio test=1.09 on 1 df, p=0.3
# n= 7, number of events= 5
lhs = "Surv(time, status)"
rhs = "x + strata(sex)"
form = as.formula(paste(lhs, "~", rhs))
form
# Surv(time, status) ~ x + strata(sex)
## formula looks good
coxph(form, test1)
# Call:
# coxph(formula = form, data = test1)
#
# coef exp(coef) se(coef) z p
# x 0.802 2.231 0.822 0.98 0.33
同样的结果。