r语言 - 结构化 x & y 函数参数,既可以作为公式 (y ~ x) 工作,也可以单独使用



我正在尝试创建一个函数,该函数通过逻辑回归运行x和y变量,然后仅使用x变量来创建决策树。(中间还会有其他争论,但它们并不真正相关。

下面是一个示例:

myfunction <- function(x.vars, y.var, dat, method) {
if (method == 1) {
lr1 <-
glm(
x.vars, y.var,
data = dat,
family = "binomial"
)
## I then use these results to come up with "some.other.variable"
tree1 <-
rpart(
some.other.variable ~ x.vars,
data = dat
)
# plot tree
library(rpart.plot)
rpart.plot(tree1)
}
else{...}
}

当我尝试通过此函数运行 x 变量的向量时,出现此错误:

formula.default(eval(parse(text = x, keep.source = FALSE([[1L]](( 中的错误:无效公式

我猜这个错误是由于 rpart 只接受"formula"参数(而不是单独插入 x 和 y 变量(,并且像我在some.other.variable ~ x.vars中所做的那样传递变量名称向量不是正确的方法。不过,我不确定如何强制它采用正确的格式。

任何帮助将不胜感激!

我通过要求 x 变量是矩阵或数据框,然后在函数中创建一个新的数据框来让它工作。然后我把公式写成"y ~ .",以避免弄清楚如何在每个变量之间放置一个"+"(尽管我想我可以在新数据框中调用它们的位置(。我最终还使用插入符号来构建树。可能有更好的方法可以做到这一点,但它奏效了。

myfunction <- function(x.vars, y.var, dat, method) {
if (method == 1) {
new.dat <- as.data.frame(cbind(y.var, x.vars))
names(new.dat)[1] <- "y"
lr1 <-
glm(y ~ .,
data = new.dat,
family = "binomial"
)
## I then use these results to come up with "some.other.variable"
library(caret)
tree1 <- train(x = x.vars, y = new.variable, method = "rpart", trControl = trControl)
)
# plot tree
library(rpart.plot)
rpart.plot(tree1)
}
else{...}
}

最新更新