2

美好的一天,在 RStudio/Shiny 中制作应用程序对我来说非常新,我正在处理一个将外部文件用作输入数据的项目。这是我的 CSV:点击查看:电器功率

我应该是应用程序:

点击查看:计算器计算电费

因此,用户在第 1 行插入一个带有设备名称的 csv,在第 2 行插入它们的功率,就像上图一样,然后 selectInput 将被更新。用户选择什么设备和使用时间,然后将计算其成本

这是我的服务器代码:

server <- function(input,output,session) {
  
  observeEvent(input$file1, {
    
    mytable <- read.csv(input$file1$datapath)
    
    updateSelectInput(session, "select", "Appliances", 
                      choices = colnames(mytable))
    
  })
  
  dataset_day <- reactive ({
    costday <- ((input$select * input$hour) / 1000) * 8.9535
    costday <- data.frame(costday)
    names(costday)  <- "Electricity Cost per day (Philippine Peso)"
    print(costday)
  })
  
  dataset_month <- reactive ({
    costmonth <- (((input$select * input$hour) / 1000) * 8.9535) * 30
    costmonth <- data.frame(costmonth)
    names(costmonth)  <- "Electricity Cost per month (Philippine Peso)"
    print(costmonth)
  })

我需要帮助将用户写入所选设备的 CSV 中的值放入等式中。

简而言之,如何修复二进制运算符错误的非数字参数。

我认为错误在 input$select 中,但我对此感到迷茫。

((input$select * input$hour) / 1000) * 8.9535

我是否需要更改或添加某些内容才能解决此问题?这个应用程序可以做吗?先感谢您!

4

1 回答 1

3

这个完全非描述性的错误消息是完全正确的,当你理解这个向后的非消息时:

你正在尝试用不是数字的东西来做数学。

在这种情况下,您可能是正确的,因为它出现在 中input$select * input$hour,因为其中一个或两个都可能是字符。在应用程序的 HTML 端,值中没有数字。只有字符串。那么我们得到什么?

尝试插入程序员已知的最佳调试工具:打印语句。在这里,尝试简单地添加一个观察者,例如:

observe({
  cat('This is observer\n')
  str(input$select)
  str(input$hour)
})

您现在应该在控制台中看到如下内容:

This is observer
  chr "Bulb"
  num 12.0

或者

This is observer
  chr "11"
  num 12.0

这意味着什么?那input$select不是数字,而是字符串。

解决方案:使用例如as.numeric(后一种情况)将其转换为数字,或将其映射为数字(前一种情况)。

于 2020-12-14T09:21:15.123 回答