r语言开发web程序,r语言编程步骤

首页 > 实用技巧 > 作者:YD1662024-02-25 23:54:09

在日常的数据工作中,常会碰到需要上传配置数据的情况,比如字典表、指定特定的用户或商品等。若能快速地做出相应的配置后台,只需在浏览器上就能上传数据,既方便自己,更重要的是还能够开放给需要的业务人员自己去管理。

这里分享一个用R快速搭建配置后台的方式,借助R的shiny包,能方便的做出这个web应用。

这个简单的配置管理后台具有两个模块:1、查询现有的配置列表2、上传更新配置列表

OK,下面开始coding。

首先,载入用到的包。这里使用xlsx上传数据,因为对于业务人员来说excel更通用,远端数据库用的是MySQL。这里你完全可以根据自己的需要修改。

library(shiny) library(xlsx) library(RMySQL)

接着,进行必要的信息配置。首先,在数据库中新建表,并定义字段,这是用来存储配置数据的。

yourtable <- "tmp_peizhi_test_yueshi" #此处修改为对应的表名 # 配置数据库连续信息 host <- "xxxx" user <- "yueshi" password <- "VcXDBcGEC1aI" port <- 3305 dbname <- "test"

然后,开始进行shiny的部分,shiny的代码包括ui和server两个主模块。

ui采用navbarPage的布局,分别建立两个tabPanel,对应"现有配置列表"和"上传配置"。为了保证上传的数据符合规范,这里设计提供上传模板,让用户下载模板后,按模板上传数据即可。在成功上传后,会提示上传成功状态,并说明数据位置,同时在右侧展示新上传的配置数据。

r语言开发web程序,r语言编程步骤(1)

r语言开发web程序,r语言编程步骤(2)

以上提到的这些,在ui上的代码其实很简短,如下。

# ui---------------------------------- ui <- shinyUI(navbarPage( "配置管理", tabPanel( "现有配置列表", dataTableOutput("t1") ), tabPanel("下载及上传配置", sidebarLayout( sidebarPanel( downloadButton("downloadData", "下载数据及模板"), br(), br(), fileInput("file1", "按模板上传xlsx文件", accept = c(".xlsx")), p("覆盖更新,请全量上传"), verbatimTextOutput("suss") ), mainPanel(tableOutput("content")) )) ))

server上的代码看起来稍微多一些,主要是数据库的连接关闭部分,但实际上依然只是用到几个固定的函数。

# server---------------------------- server <- shinyServer(function(input, output) { # 数据库查询 con <- dbConnect( drv = MySQL(), host = host, user = user, password = password, port = port, dbname = dbname ) dbSendQuery(con, "set names utf8") t <- dbGetQuery(con, paste("select * from",yourtable)) dbDisconnect(con) # 显示查询结果 output$t1 <- renderDataTable(t) # 下载模板 output$downloadData <- downloadHandler( filename = "dl.xlsx", content = function(file) { write.xlsx(t,file,row.names = F,showNA=F) } ) # 显示上传数据 output$content <- renderTable({ inFile <- input$file1 if (is.null(inFile)) return(NULL) read.xlsx(inFile$datapath,1) }) # 更新数据库表 output$suss <- renderText({ inFile <- input$file1 if (is.null(inFile)) return(NULL) t_new <- read.xlsx(inFile$datapath,1) con <- dbConnect( drv = MySQL(), host = host, user = user, password = password, port = port, dbname = dbname ) dbSendQuery(con, "set names utf8") dbWriteTable( con, name = yourtable, t_new, # 可选,定义字段类型 # field.types=list(source_mark='varchar(255)',username='varchar(255)',phone='bigint'), overwrite = T, # 覆盖模式 row.names = F ) dbDisconnect(con) print(paste0("更新成功,查询请刷新页面。表:",yourtable)) }) })

最后,因为我是将ui和server集中在一个脚本中,所以需要配置shinyApp。

shinyApp(ui,server)

以上就是coding的部分,之后可以重复使用,只需3个步骤:
1、在mysql的xxxx.test库(根据实际情况)里新建表,并定义字段
2、将此脚本中的yourtable修改为你自己的表名
3、脚本上传到shinyserver的指定目录(需服务器操作)

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.