首页 > 解决方案 > 如何使用 R2D3 使我的 Rshiny 应用程序中的用户输入与我的 R.js 文件动态交互?

问题描述

当我运行预览选项时,我有一个 d3.js 脚本作为 R.js 运行良好,但我无法让它在 RShiny 中正常运行。输入没有重新渲染输出,颜色也不是我在 js 中设置的方式。我有一个包含多列的数据框,我想根据用户输入选择列,以输入 RShiny 中将调用 d3.js 的 R2D3 函数调用。

---我在一列中设置了带有id的csv(将始终被拉出),并为所有其他列设置了值,即使它们最初代表“行星半径”等值......所以我不不必处理更改列名。

下面的代码只是我尝试过的最新版本。在尝试为输入变量设置为df变量创建一个单独的反应块之前,我已经经历了很多事情,稍后将在使用df()的r2d3函数调用中调用该变量。在这一点上,我没有选择并且心不在焉。

我在 d3js 脚本或 Rshiny 中是否缺少某些东西?正如我在其他帖子中看到的那样,我已经使用 includeScript() 在 ui 中设置了脚本。

我正在使用的 d3 脚本在这里:https ://rstudio.github.io/r2d3/articles/gallery/bubbles/

我已经在我的驾驶室里尝试了所有东西(这并不多),我的意思是在这上面花了 20 个小时,但我无法让它工作。

library(shiny)
library(r2d3)

planets <- read.csv("grouped.csv")

columnList = c("Orbital Period [days]", "Orbital Semi-Major Axis [AU]", 
"Eccentricity", "Planet Mass [Earths]", 
           "Planet Radius [Earths]", "Optical Magnitude", "Distance From 
Earth [Parsecs]", "Planet Density [g/cm3]")

ui <- fluidPage(

    includeScript(path = "bubbs1.js"),
    selectInput(inputId = "two", label = "Data Field", choices = columnList, selected = "Distance From Earth [Parsecs]"),

d3Output("d3")

)

server <- function(input, output) {

    output$d3 <- renderD3({
    if (input$two == "Orbital Period [days]"){
        r2d3(data = planets[,c(10,3)], script = "bubbs1.js", d3_version = "4")
    }
    if (input$two == "Orbital Semi-Major Axis [AU]"){
        r2d3(data = planets[,c(10,4)], script = "bubbs1.js", d3_version = "4")
    }
    if (input$two == "Eccentricity"){
        r2d3(data = planets[,c(10,5)], script = "bubbs1.js", d3_version = "4")
    }
    if (input$two == "Planet Mass [Earths]"){
        r2d3(data = planets[,c(10,6)], script = "bubbs1.js", d3_version = "4")
    }
    if (input$two == "Planet Radius [Earths]"){
        r2d3(data = planets[,c(10,7)], script = "bubbs1.js", d3_version = "4")
    }
    if (input$two == "Optical Magnitude"){
        r2d3(data = planets[,c(10,8)], script = "bubbs1.js", d3_version = "4")
    }
    if (input$two == "Distance From Earth [Parsecs]"){
        r2d3(data = planets[,c(10,9)], script = "bubbs1.js", d3_version = "4")
    }
    r2d3(data = planets[,c(10,9)], script = "bubbs1.js", d3_version = "4")
})
}

shinyApp(ui = ui, server = server)

首先,我只希望下拉菜单中的反应性起作用,如果您能帮助我使用此功能,我将设计其余部分。最终,我希望它是交互式的(点击功能,如气泡改变颜色,显示输出文本框)。

标签: shinyr2d3

解决方案


推荐阅读