为什么在 R 中找不到对象 'values'?
Why is the object 'values' not found in R?
我试了很多次,但我不知道为什么错误仍然存在,这是我试过的代码:
library(shiny)
library(neuralnet)
require(ggplot2)
# global
traininginput <- as.data.frame(runif(50, min=0, max=100))
trainingoutput <- sqrt(traininginput)
trainingdata <- cbind(traininginput,trainingoutput)
colnames(trainingdata) <- c("Input","Output")
testdata <- as.data.frame((1:13)^2)
ui <- fluidPage(
fluidRow(
column(width = 12, class = "well",
h4("Neural Network Plot"),
plotOutput("main_plot"),
hr(),
numericInput(inputId = "HL1_noN",
label = "Hidden Layer 1 : Number of Neuron:",
value = 5),
numericInput(inputId = "HL2_noN",
label = "Hidden Layer 2 : Number of Neuron:",
value = 5),
numericInput(inputId = "TL",
label = "Treshold level:",
value = 0.01,
step = 0.01),
actionButton("update", "Update View"),
br(),
br(),
numericInput(inputId = "rmse_",
label = "Root Mean Square Error",
value = sqrt(sum((sqrt(testdata)- net.results)^2)/length(net.results))))))
#--------------------------------------------------------------------------------------------
server <- function(input, output, session) {
values <- reactiveValues(
net.sqrt <- neuralnet(Output~Input,trainingdata, hidden=c(values$HL1_noN, values$HL2_noN), threshold=values$TL),
net.results <- predict(net.sqrt, testdata),
cleanoutput <- cbind(testdata,sqrt(testdata),
as.data.frame(net.results)),
colnames(cleanoutput) <- c("Input","ExpectedOutput","NeuralNetOutput"),
rmse_ = sqrt(sum((sqrt(testdata)- net.results)^2)/length(net.results)),
HL1_noN = 5,
HL2_noN = 5,
TL = 0.007,
rmse_ = sqrt(sum((sqrt(testdata)- net.results)^2)/length(net.results)))
observeEvent(input$update, {
net.sqrt <- neuralnet(Output~Input,trainingdata, hidden=c(values$HL1_noN, values$HL2_noN), threshold=values$TL)
net.results <- predict(net.sqrt, testdata)
cleanoutput <- cbind(testdata,sqrt(testdata),
as.data.frame(net.results))
colnames(cleanoutput) <- c("Input","ExpectedOutput","NeuralNetOutput")
values$HL1_noN <- input$HL1_noN
values$HL2_noN <- input$HL2_noN
values$TL <- input$TL
values$rmse_ <- input$rmse_ })
output$main_plot <- renderPlot({
net.sqrt <- neuralnet(Output~Input,trainingdata, hidden=c(values$HL1_noN, values$HL2_noN), threshold=values$TL)
net.results <- predict(net.sqrt, testdata)
cleanoutput <- cbind(testdata,sqrt(testdata),
as.data.frame(net.results))
colnames(cleanoutput) <- c("Input","ExpectedOutput","NeuralNetOutput")
ggplot(data = cleanoutput, aes(x= ExpectedOutput, y= NeuralNetOutput)) + geom_point() +
geom_abline(intercept = 0, slope = 1
, color="brown", size=0.5)})}
shinyApp(ui,server)
# rmse_ = sqrt(sum((sqrt(testdata)- net.results)^2)/length(net.results))
我认为我的错误是我将公式直接插入 'values'
。但是我真的希望它能在我给Hidden Layer 1
、Hidden Layer 2
、Threshold Level
赋值的时候计算出rmse_
的值。我应该改变哪一部分?谁能给我一些提示?或者我已经使用了错误的功能?
如果我问的方式有点不合适,我很抱歉。因为我是 R
的新手,谁能给我一些如何操作的提示?我已经尽力了,但我不确定自己是否走在正确的道路上。
我试着简化你的内容:
我假设您想在计算后更新 numericInput rmse_
;所以你可以在你的 ui
中有一个占位符,用于在按下操作按钮 update
后更新的值
您可以有一个 eventReactive
表达式,当按下 update
按钮时将调用该表达式。在这里你可以 运行 你的神经网络。隐藏层数将来自您的输入。
updateNumericInput
将在重新计算时更新 rmse_
值。
您的渲染图将调用反应式表达式以获取更新数据并在按下 update
后自动重新绘制。
如果您不希望有人在 ui
中编辑您的 rmse_
,您可能需要使用 textOutput
而不是 numericInput
-进一步修改会相对容易。
如果这更接近您的需要,请告诉我。
library(shiny)
library(neuralnet)
require(ggplot2)
# global
traininginput <- as.data.frame(runif(50, min=0, max=100))
trainingoutput <- sqrt(traininginput)
trainingdata <- cbind(traininginput,trainingoutput)
colnames(trainingdata) <- c("Input","Output")
testdata <- as.data.frame((1:13)^2)
ui <- fluidPage(
fluidRow(
column(width = 12, class = "well",
h4("Neural Network Plot"),
plotOutput("main_plot"),
hr(),
numericInput(inputId = "HL1_noN",
label = "Hidden Layer 1 : Number of Neuron:",
value = 5),
numericInput(inputId = "HL2_noN",
label = "Hidden Layer 2 : Number of Neuron:",
value = 5),
numericInput(inputId = "TL",
label = "Threshold level:",
value = 0.01,
step = 0.01),
actionButton("update", "Update View"),
br(),
br(),
numericInput(inputId = "rmse_",
label = "Root Mean Square Error",
value = NULL
))))
#--------------------------------------------------------------------------------------------
server <- function(input, output, session) {
cleanoutput <- eventReactive(input$update, {
net.sqrt <- neuralnet(Output~Input,trainingdata, hidden=c(input$HL1_noN, input$HL2_noN), threshold=input$TL)
net.results <- predict(net.sqrt, testdata)
cleanoutput <- cbind(testdata,sqrt(testdata), as.data.frame(net.results))
colnames(cleanoutput) <- c("Input","ExpectedOutput","NeuralNetOutput")
updateNumericInput(session, inputId = "rmse_", value = sqrt(sum((sqrt(testdata)- net.results)^2)/length(net.results)))
return(cleanoutput)
})
output$main_plot <- renderPlot({
ggplot(data = cleanoutput(), aes(x= ExpectedOutput, y= NeuralNetOutput)) +
geom_point() +
geom_abline(intercept = 0, slope = 1, color="brown", size=0.5)
})
}
shinyApp(ui,server)
如果您想将 rmse
作为文本输出(而不是输入),请将 ui
从 numericInput
更改为 textOutput("rmse")
并且服务器可以包括:
server <- function(input, output, session) {
rv_rmse <- reactiveVal()
cleanoutput <- eventReactive(input$update, {
net.sqrt <- neuralnet(Output~Input,trainingdata, hidden=c(input$HL1_noN, input$HL2_noN), threshold=input$TL)
net.results <- predict(net.sqrt, testdata)
cleanoutput <- cbind(testdata,sqrt(testdata), as.data.frame(net.results))
colnames(cleanoutput) <- c("Input","ExpectedOutput","NeuralNetOutput")
rv_rmse(sqrt(sum((sqrt(testdata)- net.results)^2)/length(net.results)))
return(cleanoutput)
})
output$rmse <- renderText(paste("Root Mean Square Error:", rv_rmse()))
output$main_plot <- renderPlot({
ggplot(data = cleanoutput(), aes(x= ExpectedOutput, y= NeuralNetOutput)) +
geom_point() +
geom_abline(intercept = 0, slope = 1, color="brown", size=0.5)
})
}
我试了很多次,但我不知道为什么错误仍然存在,这是我试过的代码:
library(shiny)
library(neuralnet)
require(ggplot2)
# global
traininginput <- as.data.frame(runif(50, min=0, max=100))
trainingoutput <- sqrt(traininginput)
trainingdata <- cbind(traininginput,trainingoutput)
colnames(trainingdata) <- c("Input","Output")
testdata <- as.data.frame((1:13)^2)
ui <- fluidPage(
fluidRow(
column(width = 12, class = "well",
h4("Neural Network Plot"),
plotOutput("main_plot"),
hr(),
numericInput(inputId = "HL1_noN",
label = "Hidden Layer 1 : Number of Neuron:",
value = 5),
numericInput(inputId = "HL2_noN",
label = "Hidden Layer 2 : Number of Neuron:",
value = 5),
numericInput(inputId = "TL",
label = "Treshold level:",
value = 0.01,
step = 0.01),
actionButton("update", "Update View"),
br(),
br(),
numericInput(inputId = "rmse_",
label = "Root Mean Square Error",
value = sqrt(sum((sqrt(testdata)- net.results)^2)/length(net.results))))))
#--------------------------------------------------------------------------------------------
server <- function(input, output, session) {
values <- reactiveValues(
net.sqrt <- neuralnet(Output~Input,trainingdata, hidden=c(values$HL1_noN, values$HL2_noN), threshold=values$TL),
net.results <- predict(net.sqrt, testdata),
cleanoutput <- cbind(testdata,sqrt(testdata),
as.data.frame(net.results)),
colnames(cleanoutput) <- c("Input","ExpectedOutput","NeuralNetOutput"),
rmse_ = sqrt(sum((sqrt(testdata)- net.results)^2)/length(net.results)),
HL1_noN = 5,
HL2_noN = 5,
TL = 0.007,
rmse_ = sqrt(sum((sqrt(testdata)- net.results)^2)/length(net.results)))
observeEvent(input$update, {
net.sqrt <- neuralnet(Output~Input,trainingdata, hidden=c(values$HL1_noN, values$HL2_noN), threshold=values$TL)
net.results <- predict(net.sqrt, testdata)
cleanoutput <- cbind(testdata,sqrt(testdata),
as.data.frame(net.results))
colnames(cleanoutput) <- c("Input","ExpectedOutput","NeuralNetOutput")
values$HL1_noN <- input$HL1_noN
values$HL2_noN <- input$HL2_noN
values$TL <- input$TL
values$rmse_ <- input$rmse_ })
output$main_plot <- renderPlot({
net.sqrt <- neuralnet(Output~Input,trainingdata, hidden=c(values$HL1_noN, values$HL2_noN), threshold=values$TL)
net.results <- predict(net.sqrt, testdata)
cleanoutput <- cbind(testdata,sqrt(testdata),
as.data.frame(net.results))
colnames(cleanoutput) <- c("Input","ExpectedOutput","NeuralNetOutput")
ggplot(data = cleanoutput, aes(x= ExpectedOutput, y= NeuralNetOutput)) + geom_point() +
geom_abline(intercept = 0, slope = 1
, color="brown", size=0.5)})}
shinyApp(ui,server)
# rmse_ = sqrt(sum((sqrt(testdata)- net.results)^2)/length(net.results))
我认为我的错误是我将公式直接插入 'values'
。但是我真的希望它能在我给Hidden Layer 1
、Hidden Layer 2
、Threshold Level
赋值的时候计算出rmse_
的值。我应该改变哪一部分?谁能给我一些提示?或者我已经使用了错误的功能?
如果我问的方式有点不合适,我很抱歉。因为我是 R
的新手,谁能给我一些如何操作的提示?我已经尽力了,但我不确定自己是否走在正确的道路上。
我试着简化你的内容:
我假设您想在计算后更新 numericInput
rmse_
;所以你可以在你的ui
中有一个占位符,用于在按下操作按钮update
后更新的值您可以有一个
eventReactive
表达式,当按下update
按钮时将调用该表达式。在这里你可以 运行 你的神经网络。隐藏层数将来自您的输入。updateNumericInput
将在重新计算时更新rmse_
值。您的渲染图将调用反应式表达式以获取更新数据并在按下
update
后自动重新绘制。如果您不希望有人在
ui
中编辑您的rmse_
,您可能需要使用textOutput
而不是numericInput
-进一步修改会相对容易。
如果这更接近您的需要,请告诉我。
library(shiny)
library(neuralnet)
require(ggplot2)
# global
traininginput <- as.data.frame(runif(50, min=0, max=100))
trainingoutput <- sqrt(traininginput)
trainingdata <- cbind(traininginput,trainingoutput)
colnames(trainingdata) <- c("Input","Output")
testdata <- as.data.frame((1:13)^2)
ui <- fluidPage(
fluidRow(
column(width = 12, class = "well",
h4("Neural Network Plot"),
plotOutput("main_plot"),
hr(),
numericInput(inputId = "HL1_noN",
label = "Hidden Layer 1 : Number of Neuron:",
value = 5),
numericInput(inputId = "HL2_noN",
label = "Hidden Layer 2 : Number of Neuron:",
value = 5),
numericInput(inputId = "TL",
label = "Threshold level:",
value = 0.01,
step = 0.01),
actionButton("update", "Update View"),
br(),
br(),
numericInput(inputId = "rmse_",
label = "Root Mean Square Error",
value = NULL
))))
#--------------------------------------------------------------------------------------------
server <- function(input, output, session) {
cleanoutput <- eventReactive(input$update, {
net.sqrt <- neuralnet(Output~Input,trainingdata, hidden=c(input$HL1_noN, input$HL2_noN), threshold=input$TL)
net.results <- predict(net.sqrt, testdata)
cleanoutput <- cbind(testdata,sqrt(testdata), as.data.frame(net.results))
colnames(cleanoutput) <- c("Input","ExpectedOutput","NeuralNetOutput")
updateNumericInput(session, inputId = "rmse_", value = sqrt(sum((sqrt(testdata)- net.results)^2)/length(net.results)))
return(cleanoutput)
})
output$main_plot <- renderPlot({
ggplot(data = cleanoutput(), aes(x= ExpectedOutput, y= NeuralNetOutput)) +
geom_point() +
geom_abline(intercept = 0, slope = 1, color="brown", size=0.5)
})
}
shinyApp(ui,server)
如果您想将 rmse
作为文本输出(而不是输入),请将 ui
从 numericInput
更改为 textOutput("rmse")
并且服务器可以包括:
server <- function(input, output, session) {
rv_rmse <- reactiveVal()
cleanoutput <- eventReactive(input$update, {
net.sqrt <- neuralnet(Output~Input,trainingdata, hidden=c(input$HL1_noN, input$HL2_noN), threshold=input$TL)
net.results <- predict(net.sqrt, testdata)
cleanoutput <- cbind(testdata,sqrt(testdata), as.data.frame(net.results))
colnames(cleanoutput) <- c("Input","ExpectedOutput","NeuralNetOutput")
rv_rmse(sqrt(sum((sqrt(testdata)- net.results)^2)/length(net.results)))
return(cleanoutput)
})
output$rmse <- renderText(paste("Root Mean Square Error:", rv_rmse()))
output$main_plot <- renderPlot({
ggplot(data = cleanoutput(), aes(x= ExpectedOutput, y= NeuralNetOutput)) +
geom_point() +
geom_abline(intercept = 0, slope = 1, color="brown", size=0.5)
})
}