我在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()
。具体来说,我希望能够更改因变量并添加或删除因变量。
答案 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)