我正在尝试创建一个代表一年中几个月的Shiny滑块。理想情况下,我希望将月份显示为字符串/字符而不是整数(其中1 = 1月,2 = 2月等)。
我找到this question,这导致我this answer允许字符显示在Shiny滑块上。它将JS代码插入到R.
中当我尝试更改上面的答案以适合我的示例时,我可以正确显示月份名称,但我认为JS代码中的循环存在问题。而不是1对应的值为1,它对应的值为0.我相信这是JS索引从0开始的结果,而R索引来自1.但我只是JS的新手,所以我'我不知道如何纠正这个问题,以便我的滑块正确显示1s作为1月等。作为一个说明,再次,我是一个JS新手,所以我在这里提供的代码被改为一些简单的工作,可能有很大的提升空间!我只是在给出这个例子。
library(shiny)
JScode <-
"$(function() {
setTimeout(function(){
var vals = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
for (i = 1; i >= vals.length; i++) {
var val = (1,12);
vals.push(val);
}
$('#month').data('ionRangeSlider').update({'values':vals})
}, 12)})"
runApp(shinyApp(
ui = fluidPage(
tags$head(tags$script(HTML(JScode))),
sliderInput("month",
"Month:",
min = 1,
max = 12,
value = 1,
step = 1,
width = "100%")
),
server = function(input, output, session) {
observeEvent(input$month, {
print(input$month)
})
}
))
我的滑块设置为1,因此自动显示应该是1月。相反,它是在二月。
任何补救措施?我相信这个问题存在于JS循环中,但我整天都在修改它并找不到解决方案。
答案 0 :(得分:2)
使用闪亮的 sliderTextInput 函数可以轻松完成此操作。无需添加所有这些复杂的js函数。仅需执行几行代码即可。安装包含 sliderTextInput 函数的 shinywidgets 软件包。执行以下操作:
sliderTextInput("Month","Select Month" ,
choices = c("January", "February", "March", "April" #Add more months),
selected = c("January", "February", "March", "April"), #if you want any default values
animate = FALSE, grid = FALSE,
hide_min_max = FALSE, from_fixed = FALSE,
to_fixed = FALSE, from_min = NULL, from_max = NULL, to_min = NULL,
to_max = NULL, force_edges = FALSE, width = NULL, pre = NULL,
post = NULL, dragRange = TRUE)
答案 1 :(得分:1)
我认为这取决于你的代码下一步要做什么,而只是让视觉效果显示1月作为第一个月:
在R代码中将min设置为0,max设置为11,将值设置为0
sliderInput("month",
"Month:",
min = 0,
max = 11,
value = 0,
step = 1,
width = "100%")
),