Shiny应用基础(5):数据获取与响应

本文介绍了Shiny应用中数据的获取和处理,包括静态数据处理如R语句读写服务器文件和HTML引入文件,以及用户数据处理,如UI控件函数和数据响应机制。讲解了如何通过inputId进行UI和server间通讯,以及如何自定义输入控件如textarea和颜色拾取器,并实现server端的数据更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

shiny程序的数据按来源可分为服务器数据、外网数据和用户在线提供的数据等,它们可通过web或R函数获取。外网数据和服务器数据多以文件方式存在,状态相对稳定,属于静态数据,获取较简单。shiny主要关注用户数据的处理,提供了很多相关的函数。

1 静态数据处理

1.1 shiny程序的目录结构

先理解两个概念:当前R工作目录和shiny程序网站(网页)目录。以名称为 test 的shiny程序为例,它在shiny server上的目录结构可能是这样的:

/srv/shiny-server
     |--test
        |-- app.R


如果你在shiny程序中用getwd()获取信息,你得到的是 /srv/shiny-server/test,这就是shiny程序的当前R工作目录。

但是shiny程序网站目录却没有那么直观,在上面的目录结构中你甚至看不到:它是在test目录下名称为www的子目录。为什么?没有为什么,shiny开发者这么设置的。不管你有没有设置www子目录,它shiny程序运行时都存在。所以,上面程序的目录结构实际上是这样的:

/srv/shiny-server
     |--test
        |-- www
        |-- app.R


www子目录是shiny程序HTTP服务运行的根目录,该目录以外的东西对web用户不可见。

1.2 使用R语句读写服务器文件

如果权限合适,R语句可以读取、重写、删除服务器上任何地方的文件,这跟控制台运行R语句没什么两样。这是shiny网络应用的一个巨大安全隐患,请不要设计这样的程序,否则对服务器可能造成灾难。服务器的维护者应认真采取措施,防范网络用户通过shiny客户端注入写盘代码。

理论上,你可以在任何有权限的地方放置你的数据文件,比如你的home目录。但考虑安全和shiny程序封装性,一般是在shiny程序目录下单独建立一个专门存放数据的目录,如data。

1.3 通过HTML代码引入服务器文件

如果在shiny的ui中使用link或script标签引用css或js文件,必须使用程序网站的相对路径。由于网站根目录是www,我们不能把文件放在www目录以外的其他地方(可以是www的子目录)。如果一个shiny程序test的目录结构是这样的:

/srv/shiny-server
     |--test
        |-- www
            |-- style1.css
            |-- styles
                |-- style2.css
        |-- media
            |-- style3.css
        |-- app.R


style1.cssstyle2.css 都可通过html代码引入,而 style3.css 将无法使用。ui中 style1.cssstyle2.css 的使用方式可以这样:

tags$style(rel='stylesheet' href='style1.css')
tags$style(rel='stylesheet' href='styles/style2.css')


需要使用相对路径进行引用。

2 用户数据处理

2.1 UI控件函数

在HTML页面中,用户通过输入框、选框和按钮等方式提供数据。shiny程序也一样,只不过shiny把一些特定类型的输入做成了控件函数的形式:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值