R:如何基于行选择导入数据?
我知道标题不是很清楚,所以我会尽力解释我的问题 我正在编写一个应用程序,旨在从世界银行网站导入数据。为此,我使用R:如何基于行选择导入数据?,r,shiny,R,Shiny,我知道标题不是很清楚,所以我会尽力解释我的问题 我正在编写一个应用程序,旨在从世界银行网站导入数据。为此,我使用WDI包,尤其是WDIsearch和WDI函数。前者使用您输入的单词在世界银行网站上搜索与该单词相关的指标。后者根据您在函数中输入的指示符代码导入数据 在我的应用程序中,我想首先搜索世界银行的指标。结果将显示在数据框中,第一列为指标代码,第二列为指标说明。我能够做到这一点,并显示选择。然后,我希望单击其中一行,将与该行的指示符代码相关的数据导入到新的数据框中。我知道您可以使用\u选定的
WDI
包,尤其是WDIsearch
和WDI
函数。前者使用您输入的单词在世界银行网站上搜索与该单词相关的指标。后者根据您在函数中输入的指示符代码导入数据
在我的应用程序中,我想首先搜索世界银行的指标。结果将显示在数据框中,第一列为指标代码,第二列为指标说明。我能够做到这一点,并显示选择。然后,我希望单击其中一行,将与该行的指示符代码相关的数据导入到新的数据框中。我知道您可以使用\u选定的\u行
作为输入(基于)。问题是,我认为这段代码需要datatable
,但是datatable
使得无法选择列
在我的应用程序中单击“验证”后,我立即收到一条错误消息:
警告:在::l'argument est de longueur nulle中出错
(argument的长度为零或NULL,我不知道英文中的消息是什么)
下面是一个可复制的示例:
library(pacman)
pacman::p_load(shiny, WDI, DT, data.table, dplyr, shinydashboard, shinyWidgets)
ui <- dashboardPage(
dashboardHeader(title = ""),
dashboardSidebar(
sidebarMenu(
menuItem("Test", tabName = "Test")
)),
dashboardBody(
tabItems(
tabItem(tabName = "Test",
textInput("theme_bdd",
"Search",
placeholder = "Ex : agriculture"),
actionButton("search",
"Validate"),
br(),
br(),
dataTableOutput("indicators_to_select"),
br(),
dataTableOutput("data_imported")
)
)
)
)
server <- function(input, output, session) {
indicators_to_search <- eventReactive(input$search, {
WDIsearch(string = input$theme_bdd, field = 'name')
})
global <- reactiveValues(indicators_to_search = NULL)
output$indicators_to_select <- renderDataTable({
global$test <- data.table(indicators_to_search(),
selection = "single")
global$test
})
output$data_imported <- renderDataTable({
if(!is.null(global$test)){
data <- global$test
as.data.frame(WDI(country = "all",
indicator = data[input$indicators_to_select_rows_selected, 1]
)
)
}
})
}
shinyApp(ui, server)
library(pacman)
pacman::p_负载(shiny、WDI、DT、data.table、dplyr、shinydashboard、shinyWidgets)
ui使用req
而不是if
条件。是的,它们具有相同的功能,但是req
更易于编写和读取
此外,下载似乎需要一段时间,您可能还需要在选中行后添加加载图标
output$data_imported <- renderDataTable({
req(global$test)
req(input$indicators_to_select_rows_selected)
data <- global$test
as.data.frame(WDI(country = "all",
indicator = data[input$indicators_to_select_rows_selected, 1]
})
output$data\u导入调用函数时,数据似乎还没有准备好。在反应值中使用req
或validate
,以确保它们存在。检查https://shiny.rstudio.com/articles/req.html
I添加了req(将$indicators\u输入到\u select\u rows\u selected)
就在数据下方