编辑并重用R中模型的调用的公式部分

时间:2014-10-15 11:27:39

标签: r

我在R中适合神经网络:

model = nnet(f1/max(f1)~n1+n2+n3+n4+n5+n6+n7+n8+n9+n10+n11+n12,data=md,size=3)

从模型对象中,我可以提取调用的公式model$call$formula,它返回类型为call的对象,并且看起来是长度为3的列表。我知道我可以使用{{ 1}} as.formula()调用中的call对象,但我不知道如何编辑它。

我想要做的是修改公式,然后将其传递回nnet()。具体来说,我希望能够更改因变量并添加或删除因变量。

2 个答案:

答案 0 :(得分:2)

您需要使用update.formula

  

update.formula用于更新模型公式。这通常涉及添加或删除术语,但更新可能更为通用。

以下是您可以使用mtcars中的变量查看的一些示例:

f1 <- mpg ~ cyl + wt
f2 <- update(f1, . ~ . + am)
f2
## mpg ~ cyl + wt + am
f3 <- update(f2, hp ~ .)
f3
## hp ~ cyl + wt + am
f4 <- update(f3, mpg ~ hp)
f4
## mpg ~ hp

答案 1 :(得分:2)

您也可以手动执行此操作&#34;没有update.formula。 我想使用update.formula可能会更容易,但我仍然以另一种方式给你:

## your formula
f.example <- x ~ n1 + n2
## you can extract each member of the formula with [[2/1/3]] 
f.left.side <-as.character(f.example[[2]])  # "x"
f.middle <- as.character(f.example[[1]])  # "~"
f.right.side <- as.character(f.example[[3]])  # "n1 + n2"
## you do your change, e.g:
f.right.side.new <- "n1 + n3"
## you rebuild your formula, first as a character (%s for string), then as a formula
f.new <- sprintf("%s ~ %s", f.left.side, f.right.side.new)
f.new <- as.formula(f.new)