基本數學運算: +, -, *, /, %%, ^html
數學函數: abs, acos, acosh, asin, asinh, atan, atan2, atanh, ceiling, cos, cosh, cot, coth, exp, floor, log, log10, round, sign, sin, sinh, sqrt, tan, tanhreact
邏輯判斷: <, <=, !=, >=, >, ==, %in%web
異或判斷: &, &&, |, ||, !, xorsql
聚合函數: mean, sum, min, max, sd, var數據庫
支持常見的 Spark、Hive、MySQL做爲計算引擎。apache
使用 explain
函數能夠查看到對應的SQL翻譯:segmentfault
explain(your_dplyr_manipulation_chain)
爲何在操做數據庫上不是直接使用DBI
,而是要多加一層pool
呢?答案很簡單,由於使用pool
能夠作鏈接池的管理,複用連接提高性能。pool
爲使用者提供了一個僞連接,若是是一條以前請求過的SQL,那麼pool
會將以前請求過的數據直接返回而無需等待。服務器
在Shiny
中,pool
會在全部session都結束的時候自動地回收資源而不須要其餘操做。session
這裏是shiny官方blog上的一個例子:函數
library(shiny) library(DBI) library(pool) pool <- dbPool( drv = RMySQL::MySQL(), dbname = "shinydemo", host = "shiny-demo.csa7qlmguqrf.us-east-1.rds.amazonaws.com", username = "guest", password = "guest" ) ui <- fluidPage( textInput("ID", "Enter your ID:", "5"), tableOutput("tbl"), numericInput("nrows", "How many cities to show?", 10), plotOutput("popPlot") ) server <- function(input, output, session) { output$tbl <- renderTable({ sql <- "SELECT * FROM City WHERE ID = ?id;" query <- sqlInterpolate(pool, sql, id = input$ID) dbGetQuery(pool, query) }) output$popPlot <- renderPlot({ query <- paste0("SELECT * FROM City LIMIT ", as.integer(input$nrows)[1], ";") df <- dbGetQuery(pool, query) pop <- df$Population names(pop) <- df$Name barplot(pop) }) } shinyApp(ui, server)
原來的顯示事務操做
conn <- poolCheckout(pool) dbWithTransaction(conn, { dbGetQuery(conn, A) dbGetQuery(conn, B) }) poolReturn(conn)
如今的隱式事務操做
dbWithTransaction(pool, { dbGetQuery(pool, A) dbGetQuery(pool, B) })
由於有了req
函數,咱們能夠在響應式代碼塊中輕鬆應對下面幾類類似地空值判斷:
FALSE
NULL
""
空的原子向量
僅僅包含缺失值的原子向量
try-error 類的對象中出現包含的 FALSE 的邏輯向量 (可見於 ?base::try)
是否點擊了 actionButton
下面是shiny 官方博客中的一個例子:
library(shiny) ui <- fluidPage( selectInput("datasetName", "Dataset", c("", "pressure", "cars")), plotOutput("plot"), tableOutput("table") ) server <- function(input, output, session) { dataset <- reactive({ # Make sure requirements are met req(input$datasetName) get(input$datasetName, "package:datasets", inherits = FALSE) }) output$plot <- renderPlot({ plot(dataset()) }) output$table <- renderTable({ head(dataset(), 10) }) } shinyApp(ui, server)