5.8 shiny中的整洁式编程
5.8.1 Data-masking
由于shiny通过input来获取输入信息,其中不乏在数据框中需要用到的变量名。但由于不是直接输入对应的变量名,而是依靠input$variable的形式调用,所以会出现意料之外的结果。对此,需要区分环境中的变量与数据框中的变量这两种变量。前者需要用.env$var来声明,后者用.data$var声明。
我们想根据输入的变量名及最小值来筛选数据。第一种写法就会出现意料之外的结果,第二种写法才符合预期。
# 第一种
data <- reactive(diamonds %>% filter(input$var > input$min))
# 第二种
data <- reactive(diamonds %>% filter(.data[[input$var]] > .env$input$min))环境中有
input,input中有min,故可写作.env$input$min;数据框中没有input,故.data$input$var的写法错误