欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > shiny 的认识和理解(必要)

shiny 的认识和理解(必要)

2024/10/25 15:25:23 来源:https://blog.csdn.net/skyskytotop/article/details/141902209  浏览:    关键词:shiny 的认识和理解(必要)

shiny 的认识和理解(必要)

shiny框架是R语言中构建web APP最流行的框架,可以实现功能丰富的交互功能,借助R语言在统计和数据的分析方面强大的功能,形成了各式各样的web APP部署在网络上。作为初学者或者不需要复杂功能的人士,我们可以仅仅掌握部分shiny功能即可,以下是本人构建shinyAPP过程中积累的一些认识和理解,希望能帮助大家快速掌握shinyAPP的构建方法。

一、文件组织结构

对文件的组织结构,shiny提供了以下设定,当然也可以按照自定义的形式去组织文件。

  1. app主文件夹,全部文件都放在一个文件夹内,容纳整个app;
  2. app.R文件,位于主文件夹内,容纳使用shiny包编辑的代码,这个文件所在的文件夹即为的“工作文件夹”;
  3. www子文件夹,存储app.R中所需要的文字、图片、多媒体等文件,且引用时的路径中不需要包括www子文件夹;
  4. R子文件夹,存储app.R所需要的辅助用的R代码,在app.R中引用时可直接引用,不需要指明来源。

二、前端设计

前端是指构建用户界面(UI)的代码,有许多的扩展包可以使用,都是在shiny包基础上的改进,所以比原生的shiny包更美观好用,特别是bslib。

  1. shiny APP的前端设计的元素的种类,由大到小层次包括,page(页面),layout(布局),panel(面板),widgets(互动小件)。构建UI时,是在页面上划定布局,从而形成了面板,在面板中布置widgets,形成最基础的前端。
  2. shiny和bslib联合制作UI界面,使用shiny包中的widgets,而舍弃其page和layout函数,转而使用 bslib中的page和layout函数。两个包的函数命名特点不一样,shiny是小驼峰形式的,bslib是中间有下划线的蛇形命名法。此外,bslib还提供了card和value_box这种有点特殊的函数。两者结合是官方推荐的方式。
  3. input 和output,是shiny内置的两个list对象,其中,widgets中传入的文字、数字等形成input list;shiny中还规定了一些*output函数,比如plotOutput函数,形成output,接受后端运算的结果。数据从input产生,传入到后端进行运算,再返回output进行展示。
  4. 进度条,使用额外的shinybusy或者shinycssloader包可以实现运算时的提示,属于装饰一类的功能。
  5. 主题theme,bslib包的主要功能之一,与其自定义字体、配色等,不如使用Theme更加简便。
  6. 动态UI,其功能是让widgets之间产生联动,一个改变另外一个也跟着改变。
  7. 反馈,当用户做出一定行为时,反馈给用户一定的信息。

三、后端server功能

shiny的后端代码被称作reactive programming model(响应式编程),将R代码包装在reactive,observe等函数中实现函数运行时可以暂停,等待等功能。shiny的后端没有其它的扩展包可以代替。

  1. 暂停,req()函数的功能,当函数内条件不具备时,程序暂停执行。比如,
  2. 监测,observe()使两个事件联动。
  3. 等待,isolate(),当两个环节共同产生一个结果时,可以先隔离一个环节,使其等待另外的执行条件,避免结果更新。
  4. 计划,invalidateLater(ms)和invalidateTimer()、reactivePoll()函数,
  5. 提高执行效率,因为有些代码是需要重复运行的,尽量减少这部分重复运行的代码。
  6. 使用自定义函数,自定义的函数可以放在工作文件夹的R/子文件夹下,减少app.R文件的代码量,还可以方便在别的APP中进行复用。使用函数可以减少重复的代码量,以及方便bug的检查。

以上就是shiny APP的必要的功能函数,掌握了以上的函数已经可以制作出一个简单适用的web APP,有更多需求可以在此基础上更深入地了解shiny代码。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com