Shiny应用基础(1):导言

来源:互联网 发布:java获取上个月第一天 编辑:程序博客网 时间:2024/06/07 10:51

想完整地写一系列有关Shiny使用方法的文章已经很久了。有人说过:“学习的最好方法是努力把别人教会”,我只是想通过总结能较全面地掌握Shiny的用法而已。所以,如果本系列博文如最终能如愿出炉,获益的读者请不要太过感谢我,只希望在转载文章时说明出处即可。


1 Shiny是什么?

首先,Shiny是一个R语言包。既然如此,如果你打算学习Shiny,那么你需要一定的R语言基础,能用R语言处理一些基础的数据事务,如统计和绘图。如果你只是心仪R语言但还没有学过它的基础知识,请翻看本博客以前的文章或者通过其他途径学习。

其次,Shiny是把R语言函数(即命令行程序)转成交互式应用程序的软件包。也就是说,你可以通过鼠标操作完成R语言能做的事情,如统计、绘图。

最后,Shiny产生的R语言“软件”是以网页形式呈现的,实际上是“在线”的数据处理程序。

那,Shiny程序长啥样?好吧,先看代码:


shinyApp(    ##* UI section    ui = fluidPage(    responsive=FALSE,    titlePanel("柱形图绘制"),          sidebarLayout(                sidebarPanel(            HTML('<h4>粘贴数据:</h4><textarea id="data" rows="3" style="width:99%; resize:none"></textarea>'),            HTML('<h4>X轴标签:</h4><textarea id="label" rows="3" style="width:99%; resize:none"></textarea>'),            sliderInput("cex", h5("刻度标签大小"), min=0.5, max = 6, value=1, step = 0.1, width="240px")            ),                mainPanel(            plotOutput("fig", height="400px", width="600px")            )        )    ),    ##* server section    server = function(input, output, session) {        output$fig <- renderPlot({            datax <- gsub("^\\s*([^\\s]*)\\s*$", "\\1", input$data)            if(datax == "") return(NULL)            datax <- strsplit(datax, "\\s+")[[1]]            datax <- as.numeric(datax)            par(mar=c(3, 3, 1.5, 0.5), mgp=c(2, 1, 0), cex.axis=input$cex)            x <- barplot(datax, ylim=c(0, max(datax) * 1.2), col="darkGreen")            labs <- strsplit(gsub("^\\s*([^\\s]*)\\s*$", "\\1", input$label), "\\s+")[[1]]            if(length(labs) == length(datax))                axis(1, at=x, labels=labs, tick=FALSE)            box()        })    })


新建一个目录test,把上面的代码保存到这个目录下的app.R文件中,在test目录的上一级目录下运行下面代码:

library("shiny")runApp("test")


结果会打开一个浏览器窗口,在这个页面中输入数据,调整参数,会得到下面的结果:


这就是Shiny应用程序了。回头看一下代码你会发现:

  • Shiny程序就是一个R函数shinyApp的调用,只不过看起来稍有点怪
  • shinyApp函数至少要两个参数,ui和server。ui用于设计网页界面的,server用于后台数据处理和响应

2 谁要用Shiny?

R语言包的数量可以用“无数”来形容了,为什么非要选Shiny?任何学习都是要花时间的,在学习Shiny之前,应该确定它是不是真的值得占用你宝贵的时间。回答了下面的几个问题,你可能会知道自己是不是马上要学习Shiny。

第一个问题:你有没有觉得用键盘敲入R代码处理数据很烦人?如果你觉得很享受,那千万别学Shiny,它会剥夺你的乐趣让你重返Windows时代。对我来说,编写R代码很烦,而且更烦的是一遍遍地调整参数然后再一遍遍地运行。所以我把参数都拿出来,通过Shiny用鼠标调整。

第二个问题:你是不是经常需要使用形同或相似的代码处理数据?或者说,你的代码重用性是不是很高?如果代码写完后只用一次,下次用可能是千年以后,那就没必要用Shiny了。如果你研究生几年时间内不断要做相同外观的散点图、柱形图,只不过每次的数据不一样,那你可以尝试用Shiny把这工作模式固定下来。

第三个问题:你那些不熟悉R语言的同事、学生或朋友是不是需要,或你认为他们应该使用R处理数据?我希望我实验室的学生处理数据都用R语言进行,但我也发现不是每个人都会或能够学好R语言,所以我只好用Shiny把程序写处理,他们只需要上传数据就得到处理结果,根本不用学R语言。

如果以上三个问题你都否,至少目前你还不用浪费时间学Shiny。你非要学我也没办法,嘿嘿。


3 如何学Shiny?

  • R语言基础是必需的,不用强调了吧。
  • 了解点网页编程基础知识。Shiny开发者一再强调:开发Shiny网页应用程序不需要网页编程基础。但我发现如果真没有一点基础,写出的程序界面不说难看也不会好看到那里去。你可以不学jQuery,但HTML标签和Bootstrap框架得多少了解一点。
  • Shiny软件包及相关函数说明和应用。这是本系列将要介绍的主要内容。
  • 可选项:了解点服务器安装的相关知识。

==============================================

Author: ZGUANG@LZU

Created: 2015-07-23 四 11:50

Emacs 24.3.1 (Org mode 8.2.1)

Validate

1 0
原创粉丝点击