Выведите оператор If на R Блестящий

#r #shiny

#r #блестящий

Вопрос:

Я новичок в R shiny и пытаюсь сделать калькулятор диеты (предполагая, что у вас есть значения изотопов для измерений 15N и 13C для образцов ногтей/волос). У меня возникли проблемы с форматированием моего оператора if для создания моего выходного оператора, который дает вам диету, основанную на входах d13C и d15N (т. Е., если значения d15Nair = 6, d13Cpdb = -24…… «ваш рацион в основном состоит из фруктов, овощей и зерноедов»).

Мне кажется, что это строго проблема форматирования, я был бы признателен за любую обратную связь.

 library(shiny) library(tidyverse)   ui lt;- fluidPage(numericInput(inputId = "Cnumber",  label = "d13C (per mil)",  value = "2",),  numericInput(inputId = "Nnumber",  label = "d15N (per mil)",  value = "1"),  textOutput(outputId = "DietCalculator") )    server lt;- function(input, output, session) {  d13Cpdb lt;- reactive(input$Cnumber)  d15Nair lt;- reactive(input$Nnumber) }  if(d13Cpdb lt;= -23 amp; d13Cpdb gt;= -29 amp; d15Nair lt;= 7 amp; d15Nair gt;= -1)  {print("Fruits, Vegetables, and Grain eaters")  } else if(d13Cpdb lt;= -22 amp; d13Cpdb gt;= -29 amp; d15Nair lt;= 11 amp; d15Nair gt;= -7)  {print("Non-corn-Fed Meat Consumers")  } else if(d13Cpdb lt;= -17 amp; d13Cpdb gt;= -19 amp; d15Nair lt;= 6 amp; d15Nair gt;= 4)  {print("Dairy Consumers")  } else if(d13Cpdb lt;= -21 amp; d13Cpdb gt;= -18 amp; d15Nair lt;= 17 amp; d15Nair gt;= 12)  {print("Marine Fish Consumers")  } else if(d13Cpdb lt;= -12 amp; d13Cpdb gt;= -17 amp; d15Nair lt;= 11 amp; d15Nair gt;= 3)  {print("Corn-Fed Meat Consumers")  } else if(d13Cpdb lt;= -10 amp; d13Cpdb gt;= -13 amp; d15Nair lt;= 5 amp; d15Nair gt;= 3)  {print("Corn amp; Sugar Cane Product Consumers, eat healthier")  } else {(print("Diverse diets incorporating more than one source"))  }  output$DietCalculator lt;- renderText({input$Cnumber})  output$DietCalculator lt;- renderText({input$Nnumber})            shinyApp(ui = ui, server = server)  

Комментарии:

1. В if (d13Cpdb lt;= -23 amp; d13Cpdb gt;= -29...) , вам нужно указать d13Cpdb , как d13Cpdb() , поскольку реактивы являются функциями.

Ответ №1:

Как упоминал @YBS, как d13Cpdb и в случае с реактивом, вам нужно изменить код, чтобы он был d13Cpdb() . Второе, что я сделал, это передвинул концевую скобку serverlt;-function(input, output, session){ } , чтобы охватить output$DietCalculator . Также примечательно, что у вас есть два разных renderText() кода, которые идут к одному и тому же output$DietCalculator . Если вы хотите отобразить оба, то вам нужно будет сделать второй вывод с другим именем, или, возможно, если вы хотите, чтобы они оба были в одном выводе, используйте функцию вставки, что-то вроде paste0("Cnumber is ", input$Cnumber," and Nnumber is ", input$Nnumber) . Наконец, я подумал , что вы хотели, чтобы ваше утверждение if отображалось в renderText() , поэтому я переместил его в renderText() и удалил все print() функции. Таким образом, это поместило бы его в блестящее приложение. Надеюсь, это то, что вы искали. Желаю удачи в ваших будущих начинаниях!

 library(shiny) library(tidyverse)   ui lt;- fluidPage(numericInput(inputId = "Cnumber",  label = "d13C (per mil)",  value = "2",),  numericInput(inputId = "Nnumber",  label = "d15N (per mil)",  value = "1"),  textOutput(outputId = "DietCalculator") )   server lt;- function(input, output, session) {  d13Cpdb lt;- reactive(input$Cnumber)  d15Nair lt;- reactive(input$Nnumber)   output$DietCalculator lt;- renderText({  req(input$Cnumber, input$Nnumber)  if(d13Cpdb() lt;= -23 amp; d13Cpdb() gt;= -29 amp; d15Nair() lt;= 7 amp; d15Nair() gt;= -1)  {"Fruits, Vegetables, and Grain eaters"  } else if(d13Cpdb() lt;= -22 amp; d13Cpdb() gt;= -29 amp; d15Nair() lt;= 11 amp; d15Nair() gt;= -7)  {"Non-corn-Fed Meat Consumers"  } else if(d13Cpdb() lt;= -17 amp; d13Cpdb() gt;= -19 amp; d15Nair() lt;= 6 amp; d15Nair() gt;= 4)  {"Dairy Consumers"  } else if(d13Cpdb() lt;= -21 amp; d13Cpdb() gt;= -18 amp; d15Nair() lt;= 17 amp; d15Nair() gt;= 12)  {"Marine Fish Consumers"  } else if(d13Cpdb() lt;= -12 amp; d13Cpdb() gt;= -17 amp; d15Nair() lt;= 11 amp; d15Nair() gt;= 3)  {"Corn-Fed Meat Consumers"  } else if(d13Cpdb() lt;= -10 amp; d13Cpdb() gt;= -13 amp; d15Nair() lt;= 5 amp; d15Nair() gt;= 3)  {"Corn amp; Sugar Cane Product Consumers, eat healthier"  } else {"Diverse diets incorporating more than one source"  }  }) }  shinyApp(ui = ui, server = server)