我对R shine很新,因此无法找到本网站发布的类似问题的解决方案。我试图读取并使用用户提供给R shiny的输入来生成输出。
我正在尝试创建一个简单的GUI,用户选择一个人的名字(从下拉菜单中),然后输入他/她的体重。如果高度高于某个阈值,则输出建议为“#34;增益重量”,否则为“#34;松散重量”#34;
除了来自Server.R文件的以下错误外,一切似乎都运行良好:
Error in `$.shinyoutput`(output, value_weight) :
Reading objects from shinyoutput object not allowed
如何阅读和使用变量' value_weight'在if-then-else条件下?
Main.R
library(shiny)
runApp()
Server.R
function(input, output) {
# You can access the value of the widget with input$select, e.g.
output$value_name <- renderPrint({ input$select })
output$value_weight <- renderPrint({ input$num })
if(output$value_weight > 150)
{
output$value_recommendation <- "Loose Weight"
}
else{
output$value_recommendation <- "Gain Weight"
}
}
UI.R
names_list <- list("Adam", "Jenna","Peter")
fluidPage(
selectInput("select", label = h3("Select Name"), choices = names_list, selected = 1),
hr(),
fluidRow(column(3, verbatimTextOutput("value_name"))),
numericInput("num", label = h3("Enter Weight"), value = 0),
hr(),
fluidRow(column(3, verbatimTextOutput("value_weight"))),
hr(),
fluidRow(column(3, verbatimTextOutput("value_recommendation")))
)
答案 0 :(得分:1)
代码中的问题是
行if(output$value_weight > 150)
一般来说,output
是服务器中的只写对象,而input
是只读的。如果您将output$value_weight
替换为input$num
,那么一切都应该正常。您还需要对输出使用渲染函数:在本例中为renderPrint
或renderText
(请参阅文档以了解这两个渲染函数之间的差异)。
## server.R
function(input, output) {
# You can access the value of the widget with input$select, e.g.
output$value_name <- renderPrint({ input$select })
output$value_weight <- renderPrint({ input$num })
output$value_recommendation <- renderPrint({
if(input$num > 150)
"Loose Weight"
else
"Gain weight"
})
}
另一种方法是使用函数reactive
## server.R
function(input, output) {
# You can access the value of the widget with input$select, e.g.
output$value_name <- renderPrint({ input$select })
value_weight <- reactive({ input$num })
output$value_weight <- renderPrint({ value_weight() })
output$value_recommendation <- renderPrint({
if(value_weight() > 150)
"Loose Weight"
else
"Gain weight"
})
}
答案 1 :(得分:0)
使用&#39; renderText&#39;解决了这个问题!
<强> Server.R 强>
function(input, output)
{
output$value_market <- renderPrint({ input$select })
output$value_demand <- renderPrint({ input$num })
output$value_recommendation <- renderText({
if(input$num > 150)
{
print("Loose Weight")
}
else{
print("Gain Weight")
}
})
}