条款错误.公式(公式):'.' 在公式中没有'数据'参数

luc*_*kyi 26 r formula prediction

我想用神经网络进行预测.

创建一些X:

x <- cbind(seq(1, 50, 1), seq(51, 100, 1))
Run Code Online (Sandbox Code Playgroud)

创建Y:

y <- x[,1]*x[,2]
Run Code Online (Sandbox Code Playgroud)

给他们一个名字

colnames(x) <- c('x1', 'x2')
names(y) <- 'y'
Run Code Online (Sandbox Code Playgroud)

制作data.frame:

dt <- data.frame(x, y)
Run Code Online (Sandbox Code Playgroud)

而现在,我得到了错误

model <- neuralnet(y~., dt, hidden=10, threshold=0.01)
Run Code Online (Sandbox Code Playgroud)

在条款中的错误.公式(公式):'.' 在公式中没有'数据'参数

例如,在lm(线性模型)中,这是有效的.

Rei*_*son 46

正如我的评论所述,这看起来像是非导出函数中的错误neuralnet:::generate.initial.variables.作为变通,单从名字建立一个长的公式dt,但不包括y,例如,

n <- names(dt)
f <- as.formula(paste("y ~", paste(n[!n %in% "y"], collapse = " + ")))
f

## gives
> f
y ~ x1 + x2

## fit model using `f`
model <- neuralnet(f, data = dt, hidden=10, threshold=0.01)

> model
Call: neuralnet(formula = f, data = dt, hidden = 10, threshold = 0.01)

1 repetition was calculated.

        Error Reached Threshold Steps
1 53975276.25     0.00857558698  1967
Run Code Online (Sandbox Code Playgroud)


Meg*_*ron 6

提供比上一个答案更简单的替代方法,您可以dt使用reformulate()以下名称创建公式:

f <- reformulate(setdiff(colnames(dt), "y"), response="y")
Run Code Online (Sandbox Code Playgroud)

reformulate()不需要使用paste()并自动将术语添加到一起.