R︱shiny实现交互式界面布置与搭建(案例讲解+学习笔记)

本文主要是介绍R︱shiny实现交互式界面布置与搭建(案例讲解+学习笔记),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

要学的东西太多,无笔记不能学~~ 欢迎关注公众号,一起分享学习笔记,记录每一颗“贝壳”~

———————————————————————————


看了看往期的博客,这个话题竟然是第一次涉及,还真是学无止境啊。

Web Service 这个概念比较成功了, 在SOAP服务之后, Restful服务的普及, 使得数据库的CRUD操作通过网络无限延伸。 普遍的好处是:

1) 你不需要安装任何程序, 携带数据, 只要有网的地方, 你就能演示。(远程)

2) 只要安装一次, 可以多人使用, 可以让别人试用。(多用户)

3) 不用担心软件或者代码泄密, 可以控制用户使用时间和权限。 (服务)


——————————————————————————————————


案例一:中文词云


昨天自己动手实践了一把,做了一个简单的低版本词云实现的web,同时里面内嵌了jiebaR分词,导入文本即可分词、画词云,效果如下图:




——————————————————————————————

案例二:社交网络


网络上的一个社交网络案例——打开网页即可使用:

https://kehaowu.shinyapps.io/SocialNetwork/


这个是个非常简单的应用,我们输入的数据包括人物关系和一些简单的参数。其中人物关系是这样定义的:

比如A和B是friend关系,那么:

输入数据中的Former Person就是A;Later Person就是B,Label就是friend。

依次类推,如果A和B是friend关系,A和C是couples关系,B和C是classmate关系,那么输入数据就应该是:

Former Person: A,A,B

Later Person: B,C,C

Label:friend,couples,classmate


参考博客:

R语言 用shiny开发一个简单的画人物关系应用

 


——————————————————————————————

案例三:官网的案例库


http://shiny.rstudio.com/gallery/

有案例库,你就知道怎么做了吧?——别告诉我,你没做过PPT,copy一下他们的代码就行啦~



——————————————————————————————


一、Shiny安装


1. 直接通过包管理器安装


      install.packages("shiny")

2. 利用devtools通过github安装


      if (!require("devtools"))install.packages("devtools")devtools::install_github("rstudio/shiny")


这里要注意, 如果需要利用代理

library(httr)set_config(use_proxy(url="18.91.12.23", port=8080, username="user",password="password"))

或者要设定专门的版本号

      devtools::install_version("shiny", version = "0.10.2.2")

————————————————————————————————————————————


二、ui.R+server.R+global.R


看到网上大多给你扯ui.R+server.R,很少会提到global.R,笔者在自己实践的时候遇到的了global.R的使用问题,网上教程只能自己参悟了。

ui.R:搭框架,控件;

server.R:每个控件背后的算法代码;

global.R:server.R中,万一有很长的代码与调用很多其他packages就可以用global写一个函数集合,然后统一在server.R调用。


基本的框架就是:

# ui.Rlibrary(shiny)shinyUI(fluidPage())# server.Rlibrary(shiny)shinyServer(function(input, output) {})

往里面的函数里面写东西就行。


1、ui.R——界面设计


library(shiny)# Define UI for application that plots random distributions 
shinyUI(pageWithSidebar(# Application titleheaderPanel("Hello Shiny!"),# Sidebar with a slider input for number of observationssidebarPanel(sliderInput("obs", "Number of observations:", min = 0, max = 1000, value = 500)),# Show a plot of the generated distributionmainPanel(plotOutput("distPlot"))
))
sidebarPanel就是侧面的控件,mainPanel就是右边的控件(默认位置),一般mainPanel通过plotOutput画图。
sliderInput是一个滑动的窗口。


2、server.R


library(shiny)shinyServer(function(input, output) {output$distPlot <- renderPlot({dist <- rnorm(input$obs)hist(dist)})
})

server.R是数据处理的地方,后端,数据来源都来自于ui.R,譬如obs,可能server处理好的图才是返回给ui.R。譬如dist

要调用ui里面的内容的话就是Input$obs就是上面sliderInput里面输入的内容。


Shiny提供一些缓存优化的机制, 其中最有效的是Reactive Expression 反冲表达式。

Reactive机制使得交互渲染的效率大幅度提高。 举个例子, server.R返回一个数据绘图, 但是每次运行需要重新读取数据。 但是当如果输入没有变化的时候, 这种重复的数据读取会极大的延迟反应, 浪费资源。

基于这种考虑, 我们使用reactive关键词重写了数据读取模块。reactive像一个带cache的模块, 并且当reactive检查到数据输入没有任何变化, 那么输出也不会有变化的时候, reactive就会使用缓存的数据,避免了重复运算, 加速了反应。



3、global.R


那么关系现在是这样的,ui.R负责前端,是数据获取的地方,server.R是处理的地方,返回的是处理好后的数据列;那么global.R是用来补充server.R的功能的。

一般是用来写一个函数,然后直接在server.R调用。

来看一个官网里面的global的案例:

library(tm)
library(wordcloud)
library(memoise)# The list of valid books
books <<- list("A Mid Summer Night's Dream" = "summer","The Merchant of Venice" = "merchant","Romeo and Juliet" = "romeo")# Using "memoise" to automatically cache the results
getTermMatrix <- memoise(function(book) {# Careful not to let just any name slip in here; a# malicious user could manipulate this value.if (!(book %in% books))stop("Unknown book")text <- readLines(sprintf("./%s.txt.gz", book),encoding="UTF-8")myCorpus = Corpus(VectorSource(text))myCorpus = tm_map(myCorpus, content_transformer(tolower))myCorpus = tm_map(myCorpus, removePunctuation)myCorpus = tm_map(myCorpus, removeNumbers)myCorpus = tm_map(myCorpus, removeWords,c(stopwords("SMART"), "thy", "thou", "thee", "the", "and", "but"))myDTM = TermDocumentMatrix(myCorpus,control = list(minWordLength = 1))m = as.matrix(myDTM)sort(rowSums(m), decreasing = TRUE)
})
主要就是写了一个函数,一开始把调用的包都给出来了,然后跟函数一样了。这里的memoise函数是缓存的功能,之后就跟正常使用的代码一样。

————————————————————————————————————————————


三、shiny的部署


很简单的是,一般写完之后放在一个文件夹里面,然后runApp一下那个路径的文件夹就行了。

或者Rstudio里面可以直接:”Run App“按钮,你把三个文件导入Rstudio随便点一下就可以,Rstudio会帮你识别。

其中,你想要最右边的那三个代码栏目的话,把”DESCRIPTION“+”Readme.md“复制到那个文件夹里面,自动会显示出来,而且所有的APP都可以复制同一份内容,上面的两个东西可以到library的example里找得到。



————————————————————————————————————————————


四、Shiny 服务器


假如你有创建了很多的Shiny服务, 那么一个专门的Shiny服务器会方便部署。

一般可以有两种部署, 一种是自己搭建一个Shiny Server。 这样就可以同时使用很多的Shiny 应用了。

另外一种是直接部署到Shiny云服务上去, 譬如“www.shinyapps.io” 注册一个云账号, 然后把服务部署到云上去。在注册完成后, 你只要遵照详细的链接, 授权, 和部署的步骤,就可以把本地Shiny App上传部署。


参考来自微信公众号: AIaidddzcAI2ML人工智能to机器学习


————————————————————————————————————————————


延伸一:一个用于监控Shiny应用的Shiny应用

来源公众号:子豹

核心部分来自Huidong Tian的文章
http://withr.me/a-shiny-app-serves-as-shiny-server-load-balancer

## Setup work directory;
setwd("/srv/shiny-system/Data") 
I <- 0
for (i in 1:60) {system("top -n 1 -b -u shiny > top.log")dat <- readLines("top.log")id <- grep("R *$", dat)Names <- strsplit(gsub("^ +|%|\\+", "", dat[7]), " +")[[1]]if (length(id) > 0) {# 'top' data frame;L <- strsplit(gsub("^ *", "", dat[id]), " +")dat <- data.frame(matrix(unlist(L), ncol = 12, byrow = T))names(dat) <- Namesdat <- data.frame(Time = Sys.time(), dat[, -ncol(dat)], usr = NA, app = NA)dat$CPU <-as.numeric(as.character(dat$CPU))dat$MEM <-as.numeric(as.character(dat$MEM))# Check if connection number changed;for (i in 1:length(dat$PID)) {PID <- dat$PID[i]system(paste("sudo netstat -p | grep", PID, "> netstat.log"))system(paste("sudo netstat -p | grep", PID, ">> netstat.log2"))system(paste("sudo lsof -p", PID, "| grep /srv > lsof.log"))netstat <- readLines("netstat.log")lsof <- readLines("lsof.log")dat$usr[i] <- length(grep("ESTABLISHED", netstat) & grep("tcp", netstat))dat$app[i] <- regmatches(lsof, regexec("srv/(.*)", lsof))[[1]][2]}dat <- dat[, c("app", "usr")]} else {dat <- data.frame(app = "app", usr = 0)}write.table(dat, file = "CPU.txt")
}




参考文献:


1、中文教程:http://yanping.me/shiny-tutorial/

2、英文官网:http://shiny.rstudio.com/   

3、R powered web applications with Shiny :一些讲解,比较深入讲解每个模块内容

这篇关于R︱shiny实现交互式界面布置与搭建(案例讲解+学习笔记)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/518522

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi