[问题] shiny判断式重复性高 简化方法

楼主: daybreakya (熊猫)   2018-01-03 23:16:55
[问题类型]:
效能咨询(我想让R 跑更快)
[软件熟悉度]:
入门(写过其他程式,只是对语法不熟悉)
[问题叙述]:
[程式范例]:
因为研究的关系,选择R,其中对于shiny内使用if else
若有重复性高的程式,不知道可以怎么处理? 例如:

文字说明:有5个 checkboxGroupInput
分别为年级、性别、年度、学期、事件
我想要让使用者可以自由的配对,然后显示出图形
可能会有很多种排列,而且5个checkbox每个一定都会有选择
大一、男、103年、第一学期、期末、除夕
大二、大四、男女、105年度、106年度、第二学期、暑假
找了各种关键字,在stackoverflow找到一篇类似的问题,但没人回...
网址:https://goo.gl/KgDTrs
于是今天很笨拙地慢慢一个一个if else做判断
光是做完年级、性别的任意搭配,就已经3万多行...

虽然可以运行,但有点蠢,不知道有什么关键字或是方法,处理呢?
谢谢
[环境叙述]:
R version 3.4.2 (2017-09-28)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)
[关键字]:
选择性,也许未来有用
作者: seimwiwa (pezcadido)   2018-01-03 23:46:00
不知道要呈现什么图形,但是不是可以filter(学年%in%c(1,2),性别%in%c(‘m’)这种就好,手机拍版见谅。
作者: cywhale (cywhale)   2018-01-04 00:35:00
? dplyr::case_when code那张图应完整些才比较知道你要啥
作者: a78998042a (Benjimine)   2018-01-04 09:10:00
没写过shiny,不过就是问简化if else的写法?### 建立 temp,包含### 3个年级、2种性别、3个学年度、2个学期、2个事件temp=expand.grid(1:3,c('F','M'),105:107,1:2,1:2)colnames(temp)=c('年级','性别','年度','学期','事件')### 当 年级=1, 性别=F, 年度=105, 学期=事件=1### 以A、B、C、D、E 作为indexA = 1; B = 'F'; C = 105; D = 1; E = 1with(temp, which(年级==A & 性别==B & 年度==C &学期==D &事件 == E))###得到位置然后画图,这样有解决您的问题吗?
作者: chuubbyy (byetos)   2018-01-04 11:08:00
这只是筛选的问题,不需要ifelse,转成data table,然后,DT[年级 %in% input$年级][性别 %in% input$性别][年度 %in% input$年度]......
楼主: daybreakya (熊猫)   2018-01-04 12:44:00
阿..谢谢回答的大家,看起来方便好多,等等来研究一下
作者: HumuHumu (呼姆呼姆)   2018-01-04 15:40:00
switch?
作者: clansoda (小笨)   2018-01-04 19:19:00
我比较好奇三万多行是要怎么写,也是很有耐心

Links booklink

Contact Us: admin [ a t ] ucptt.com