错误:二元运算符的非数字参数
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 <- read.csv(input$file1$datapath); colnames(mytable)
的输出并将其与selectInput
和updateSelectInput
所需的输入进行比较。此外,在应用程序的当前状态下,在浏览器中检查生成的 html(使用“检查元素”)。现在把它和你给它的东西比较一下。
最后,尝试查看updateSelectInput
的示例,看看如何创建一个向量,它可以向用户显示一组值,并返回一组不同的值给代码 (实际上是mytable
的第一行和第二行)。以上是关于错误:二元运算符的非数字参数的主要内容,如果未能解决你的问题,请参考以下文章
y - ymean 中的错误:二元运算符 randomForest R 的非数字参数
错误:重载的 'operator<<' 必须是二元运算符(有 3 个参数)
2021-09-06:给表达式添加运算符。给定一个仅包含数字 0-9 的字符串 num 和一个目标值整数 target ,在 num 的数字之间添加 二元 运算符(不是一元)+- 或 * ,返回所有(