反应式通话不适用于标签$ img(src =?)

时间:2019-01-15 21:30:13

标签: r image shiny shinydashboard

背景故事:对于我的项目,我正在制作一个仪表板,可以轻松访问酒店信息。现在,我希望它的工作原理是,如果评分高于9,则评分为4.5星。如果高于8,则获得4星。等等。现在我不是代码神,所以走这么远已经花了我很多时间,但是如果我查看各种不同的tag $ img代码,它们看起来都像我固定了一样。但这不会显示图像。我的代码有什么问题?

问题:尽管我在代码中填入了4星等的部分,但该部分不起作用。我什至在控制台中检查了它。它根据酒店得分选择.PNG文件的部分会给出正确的文件,并像“ $ 5stars.png”一样将其返回,如tag $ img需要。我什至制作了这样的小代码:tags $ img(src =“ 5stars.png”,height = 50,width = 200)确实可以那样工作,但是我希望它是“反应性的”,因此它显示了不同的图像对于不同的评级。那么,即使控制台说它用正确的文本替换了textOutput(“ hotelImage”),为什么它也不起作用?

我的身体代码是:

tags$img(src = textOutput("hotelImage"), height = 50, width = 200)

textOutput的决定如下:

output$hotelImage <- renderText({
 if(ratingGiver() > 9){
   '"5stars.png"'
 }else if (ratingGiver() > 8) {
   '"45stars.png"'
 }else if (ratingGiver() > 7) {
   '"4stars.png"'
 }else if (ratingGiver() > 6) {
   '"35stars.png"'
 }else if (ratingGiver() > 5) {
   '"3stars.png"'
 }else if (ratingGiver() > 4) {
   '"25stars.png"'
 }else if (ratingGiver() > 3) {
   '"2stars.png"'
 }else if (ratingGiver() > 2) {
   '"15stars.png"'
 }else if (ratingGiver() > 1) {
   '"1stars.png"'
 }else{
   '"0stars.png"'
 }
})

我尝试了所有可能的方法,从反应式到renderImage。可能错过了一些,但我确实很想找。

我的期望是,对于我选择的酒店,它会经过if并选择正确的位置,然后以src =“ 5stars.png”填充正确的文件路径,然后将加载图像。使用此代码,它应该可以工作,因为我检查了一下,并将其粘贴到了textOutput(“ hotelImage”)位上的“ 5stars.png”。我通过输入textOutput(“ hotelImage”)进行检查。但是由于某种原因,它仍然给我X图像。什么不对?它粘贴了正确的内容。我需要其他代码吗?

编辑:

经过一番评论,我得到了将Reactive与renderImage一起用于plotOutput的建议。然后我尝试了: 在下面,您可以看到我为此所做的反应。

 ReactiveImage <- reactive({
    if(ratingGiver() > 9){
      '"5stars.png"'
    } else if (ratingGiver() > 8) {
      '"45stars.png"'
    }else if (ratingGiver() > 7) {
      '"4stars.png"'
    }else if (ratingGiver() > 6) {
      '"35stars.png"'
    }else if (ratingGiver() > 5) {
      '"3stars.png"'
    }else if (ratingGiver() > 4) {
      '"25stars.png"'
    }else if (ratingGiver() > 3) {
      '"2stars.png"'
    }else if (ratingGiver() > 2) {
      '"15stars.png"'
    }else if (ratingGiver() > 1) {
      '"1stars.png"'
    }else{
      '"0stars.png"'
    }
   })

在下面,您可以看到renderImage的输出:

output$RenderImage2 <- renderImage({
    tags$img(src = ReactiveImage(), height = 50, width = 200)
  })

以及正文代码:

plotOutput("RenderImage"),

遗憾的是,以上代码似乎都无法解决我的问题。我也尝试将其放入observeEvent中,以查看是否可行。没错,但是我还是会显示代码,因为也许是窍门,但我犯了一个错误:

observeEvent(input$hotelMap_marker_click[[1]], { output$RenderImage2 <- 
renderImage({
    tags$img(src = ReactiveImage(), height = 50, width = 200)
  })
  })

1 个答案:

答案 0 :(得分:0)

答案

经过一番搜索,我最终得到了这一点: 服务器:

 output$Imagen <- renderImage({
      if(ratingGiver() > 9){
        Leg <- "www/5stars.png"
      } else if (ratingGiver() > 8) {
        Leg <- "www/45stars.png"
      }else if (ratingGiver() > 7) {
        Leg <- "www/4stars.png"
      }else if (ratingGiver() > 6) {
        Leg <- "www/35stars.png"
      }else if (ratingGiver() > 5) {
        Leg <- "www/3stars.png"
      }else if (ratingGiver() > 4) {
        Leg <- "www/25stars.png"
      }else if (ratingGiver() > 3) {
        Leg <- "www/2stars.png"
      }else if (ratingGiver() > 2) {
        Leg <- "www/15stars.png"
      }else if (ratingGiver() > 1) {
        Leg <- "www/1stars.png"
      }else{
        Leg <- "www/0byebitchgone.png"
      }
      list(src=Leg, height = 90, width = 380)

    }, deleteFile = FALSE)

身体:

imageOutput(outputId="Imagen")