2017-10-09 9 views
0

私はRが光っていて新しく、このサイトに掲載された同様の質問から解決策を見つけることができませんでした。私はユーザーが提供する入力を読み込んで使用して、出力を生成するために光沢にしようとしています。ダイナミックユーザ入力に基づく印刷出力R Shiny

私はユーザーが(ドロップダウンメニューから)人の名前を選択し、次に彼/彼女の体重を入力する簡単なGUIを作成しようとしています。高さが特定のしきい値を上回っている場合、出力の推奨値は「Gain Weight」です。それ以外の場合は「Loose Weight」です。

すべてがServer.Rファイルから次のエラーを除いて、正常に動作しているようだ:

Error in `$.shinyoutput`(output, value_weight) : 
Reading objects from shinyoutput object not allowed 

私はどのように読んでのif-then-else条件に変数「value_weight」を使用することができますか?

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"))) 

    ) 

答えて

1

あなたのコードに問題が

if(output$value_weight > 150) 

は、一般的にラインであるinput sが読み取り専用であるが、output Sは、サーバーに書き込み専用のオブジェクトです。 output$value_weightinput$numに置き換えると、すべて正常に動作するはずです。また、出力のレンダリング関数を使用する必要があります。この場合はrenderPrintまたはrenderTextです(これらの2つのレンダリング関数の違いについては、ドキュメントを参照してください)。これを行うには

## 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" 
    }) 
} 
0

'renderText' を使用して問題を解決しました!

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") 
    } 
    }) 
} 
+0

ああを使用しています!ちょうどあなたがそれをあなた自身で解決するのを見た。うまくいけば、私の答えは*なぜ*あなたがこの特定のエラーメッセージに遭遇したかについてより多くの洞察を与える。 –

+0

はい!私はあなたの答えを受け入れました!ありがとう:) – Batool

関連する問題