错误:二元运算符的非数字参数

Posted

技术标签:

【中文标题】错误:二元运算符的非数字参数【英文标题】:Error: non-numeric argument to binary operator 【发布时间】:2021-03-24 17:38:34 【问题描述】:

美好的一天,在 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

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

【问题讨论】:

【参考方案1】:

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

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

在这种情况下,您可能是正确的,因为它出现在 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(后一种情况),或将其映射到数字(前一种情况)。

【讨论】:

您好,先生,可以使用设备名称下方 csv 中的值或数字将其映射到数字吗?如果是这样的话,我很抱歉我仍然是编程新手,谢谢你的理解。如果用户选择灯泡,服务器将使用 csv 中的值 11 作为数值并像这样解决它。有可能吗? 或类似用户选择灯泡时,numericInput 框将根据 csv 显示数字 11,使其成为数值。 多么勇敢的年轻菜鸟,一次尝试 3 个 事物!但你不是没有结果的。对于来自 csv 的输入,您必须解构您的命令。 IE。考虑mytable &lt;- read.csv(input$file1$datapath); colnames(mytable) 的输出并将其与selectInputupdateSelectInput 所需的输入进行比较。此外,在应用程序的当前状态下,在浏览器中检查生成的 html(使用“检查元素”)。现在把它和​​你给它的东西比较一下。 最后,尝试查看updateSelectInput 的示例,看看如何创建一个向量,它可以向用户显示一组值,并返回一组不同的值给代码 (实际上是mytable 的第一行和第二行)。

以上是关于错误:二元运算符的非数字参数的主要内容,如果未能解决你的问题,请参考以下文章

y - ymean 中的错误:二元运算符 randomForest R 的非数字参数

错误:重载的 'operator<<' 必须是二元运算符(有 3 个参数)

条件二元运算符错误

2021-09-06:给表达式添加运算符。给定一个仅包含数字 0-9 的字符串 num 和一个目标值整数 target ,在 num 的数字之间添加 二元 运算符(不是一元)+- 或 * ,返回所有(

SSIS 条件拆分错误 - 数据类型 DT_BYTES 不能与二元运算符“==”一起使用

错误:二元运算符'&&'的错误操作数类型。这个错误是什么意思?