 # How to simply multiply 2 numeric values from Shiny Widgets

Hi all,

Learning Shiny
and using the basic Shiny example (as an RMD),
ref: waiting time btw geyser eruptions.

Runs great!.

But now,
I am trying to do something very simple,
just multiply 2 numeric values:

• one num value from the dropdown menu widget
• the other num value from the slider widget

in that example code.

But, after I click [RUN DOCUMENT] in Rstudio,
I keep getting the mssg:
"Error: non-numeric argument to binary operator"...

Here's what my test "shiny.Rmd" file
looks like:
(my attempt to multiply the 2 values
is at the end...).

## title: "shiny" author: "rw" date: "7/9/2021" output: html_document runtime: shiny

### Here are two Shiny widgets

``````selectInput("n_breaks", label = "Number of bins:",
choices = c(10, 20, 35, 50), selected = 20)

min = 0.2, max = 2, value = 1, step = 0.2)
``````

### ...that build a histogram.

``````renderPlot({
hist(faithful\$eruptions, probability = TRUE,
breaks = as.numeric(input\$n_breaks),
xlab = "Duration (minutes)",
main = "Geyser eruption duration")

lines(dens, col = "blue")
})

``````
``````# a test to do R ops (ie: multiply) w/ 2 widget num values.
nb <- reactive(input\$n_breaks)

nb * bw   # nope...
``````

Help!.
I tried the whole afternoon...(several variations),
including searching in StackO. No luck...

I must be missing something basic in the code.
Could somebody help me, pls?.

## SFdudelatest R, Rstudio, Chromium browserUbuntu Linux 20.04

Most of the time this error comes from trying to do a mathematical operation on a character string. In your case, this is because `selectInput` always returns a character value, so is returning e.g. `"10"` instead of `10`. Coercing the value of `input\$n_breaks` to a numeric before trying to multiply it should resolve the error, i.e..:

``````nb <- reactive(as.numeric(input\$n_breaks))
nb() * bw()
``````

This is why the histogram works - you've used `as.numeric`.

Edit: in addition to this, the value of the reactives also need to be accessed with `nb()` and `bw()` rather than `nb` and `bw`, as per @nirgrahamuk answer

1 Like

Thanks, cnbrownlie for the suggestion.

Tried:
nb <- reactive(as.numeric(input\$n_breaks))
nb * bw

but still get the error mssg... "Error : non-numeric argument to binary operator...".
SFdude

nb is not numeric, it is a reactive. The numeric value can be accessed with nb() from within some reactive contect such as a reactive or observe.
If you want to see the multiplication on the console then add the following into the server code.

``````observe({
cat(req(nb())* req(bw()),"\n")
})
``````
2 Likes

Thanks for responding renirgrahamuk!.

In my .RMD file (see my 1st post this thread),
I now tried, as you suggested:

nb <- reactive(as.numeric(input\$n_breaks))

#nb * bw
observe({
cat(req(nb())* req(bw()),"\n")
})

In my Rstudio Console,
I always see the output:

2*3
 6

It's always the SAME result:
(2 * 3 = 6),
no matter which value you choose
in the Menu and Slider widgets...

Also,
the results of the multiplication
should appear in the Shiny window itself,
not in the Rstudio Console.

Mystery...
There's gotta be an easy way
to do this simple operation...

Sfdude

Thanks to BOTH:
cnbrownlie AND nirgrahamuk

Either Solution works fine!.
(the system won't allow me
to mark both as "Solutions"...)

Bonus Question:
how do I easily determine if a Shiny Input widget,
returns a numeric or a "character" result?. 