在将R公式传递给lm函数之前检查其语法和拼写错误

pgx2nnw8  于 2023-01-28  发布在  其他
关注(0)|答案(1)|浏览(107)

我有一个很棒的应用程序,用户可以在其中定义公式,然后运行模型。但是,我想确保用户正确定义了公式。用户只会输入公式的右侧。因此,左手始终是response ~。在将公式传递给lm函数之前,我应该如何验证公式不会导致错误?

set.seed(123)
df <- data.frame(response = rnorm(20,35, 12), Gender =sample(c("M","F"), 20, replace = T), Temp = rnorm(20,70, 5),
           Drug =sample(c("A","B","C"), 20, replace = T))

我希望检查能正确地找到右边的错误公式,如下面的公式。
语法错误:

form <- "Drug + "
form <- "Drug + Gender + Gender(Drug"
form <- "+Drug+Gender"
form <- "Drug + Gender + Gender*Drug + "

拼写错误:

form <- "drug + Gender + Drug*Gender"

以及任何其他可能性

lm(data = df, formula = paste("response ~", form))
wqsoz72f

wqsoz72f1#

1)语法检查如果存在语法错误,则返回TRUE,否则返回FALSE。

form <- "Drug + "
 fo <- try(formula(paste("~", form)), silent = TRUE)
 inherits(fo, "try-error")
 ## [1] TRUE

2)有效变量检查返回badvar中的错误变量。如果length(badvar)〉0为TRUE,则存在错误变量,否则没有。

form <- "Drug + Gender + XYZ"
fo <- try(formula(paste("~", form)), silent = TRUE)

# if fo passed syntax check then continue
badvars <- setdiff(all.vars(fo), names(df))
length(badvars) > 0
## [1] TRUE
badvars
## [1] "XYZ"

相关问题