良心推荐:R语言中的十个小技巧
点击上方关注,All in AI中国
我经常告诉我的同事和其他程序员一些我在R中使用的简单的东西,它们可以帮助我完成需要改进的任务。这些方法从简单的快捷方式、鲜为人知的函数到方便的小技巧都有。
由于R生态系统如此丰富且不断增长,人们往往会错过一些能够帮助他们完成任务的事情。所以我经常得到一些惊讶的反应,就像我从来不知道那样!
这里有十件让我的生活更轻松的事情。如果你已经全部了解它们,很抱歉浪费你的阅读时间,请考虑添加一些评论,其中包含你认为对其他读者有益的其他内容。
1. switch函数
我喜欢swith()。它基本上是根据另一个变量的值来选择其值的if语句的一个方便的缩写。我发现当我编写代码时,根据您先前的选择需要加载不同的数据集时,它特别有用。例如,如果您有一个名为animal的变量,并且您想要根据动物是狗、猫还是兔子加载不同的数据集,您可以写下:
data <- read.csv( switch(animal, "dog" = "dogdata.csv", "cat" = "catdata.csv", "rabbit" = "rabbitdata.csv") )
这在Shiny应用程序中特别有用,您可能希望根据一个或多个输入菜单选项加载不同的数据集甚至环境文件。
2.RStudio快捷键
这不仅仅是一个R技巧,更多是关于RStudio IDE的更多内容,但是可用于常用命令的快捷键非常有用,可以节省大量的输入时间。我最喜欢的是Ctrl + Shift + M用于管道运算符%>%,用Alt + - 用于赋值运算符< - 。如果你想看到一整套这些很棒的快捷方式,只需在RStudio中键入Atl + Shift + K即可。
3.flexdashboard包
如果您希望快速启动Shiny仪表板,并且操作简单,那么flexdashboard软件包可以满足您的一切需求。它提供了简单的HTML快捷方式,可以轻松构建侧边栏,并将显示组织成行和列。它还有一个超级灵活的标题栏,您可以将应用程序组织到不同的页面,并放入图标和指向Github代码或电子邮件地址或其他任何内容的链接。作为在RMarkdown中运行的软件包,它还允许您将所有应用程序保存在一个Rmd文件中,而不是需要将其分解为单独的服务器和UI文件,例如shinydashboard。每当我需要创建仪表板的简单原型版本,然后再将其转移到更高级的设计时,我就会使用flexdashboard。我经常可以使用flexdashboard在一小时内启动并运行仪表板。
4.R Shiny中的req和验证函数
R Shiny开发可能令人沮丧,特别是当您收到通用错误消息时,无法帮助您了解底层出现的问题。随着Shiny的发展,越来越多的验证和测试功能被添加,以帮助更好地诊断和警告特定发生的错误。req()函数允许您阻止操作发生,除非环境中存在另一个变量,但是静默地执行操作而不显示错误。因此,您可以使UI元素的显示以先前的操作为条件。例如,参考我上面的例子1:
output$go_button <- shiny::renderUI({ # only display button if an animal input has been chosen shiny::req(input$animal) # display button shiny::actionButton("go", paste("Conduct", input$animal, "analysis!") ) })
在呈现输出之前进行validate()检查,并且如果某个条件未满足,则允许您返回定制的错误消息,例如,如果用户上载了错误的文件:
# get csv input file inFile <- input$file1 data <- inFile$datapath # render table only if it is dogs shiny::renderTable({ # check that it is the dog file, not cats or rabbits shiny::validate( need("Dog Name" %in% colnames(data)), "Dog Name column not found - did you load the right file?" ) data })
5.使用系统环境保留我的所有凭据
如果要共享需要登录凭据到数据库之类的代码,则可以使用系统环境来避免将这些凭据发布到Github或其他可能存在风险的空间。您可以将凭据作为命名环境变量放在R会话中,例如:
然后在共享脚本中,您可以使用这些环境变量登录。例如:
# get csv input file inFile <- input$file1 data <- inFile$datapath # render table only if it is dogs shiny::renderTable({ # check that it is the dog file, not cats or rabbits shiny::validate( need("Dog Name" %in% colnames(data)), "Dog Name column not found - did you load the right file?" ) data })
更方便的是,如果你经常使用这些凭证,你可以在操作系统中将它们设置为环境变量,这样当你在R中工作时它们总是可用,但你不必在你的代码中显示它们。
6.使用styler自动化tidyverse样式
您的代码可能不像您所希望的那样整洁,您没有时间对其进行编辑。stylerpackage具有许多功能,允许自动重新编码代码以匹配tidyverse风格。它非常简单,就像在你的凌乱脚本上运行styler :: style_file(),它将为你做很多(虽然不是全部)工作。
7.参数化R Markdown文档
所以你写了一个可爱的R Markdown文档,你已经分析了很多关于狗的事实。然后你会被告知 - '不,我对猫更感兴趣。如果将R标记文档参数化,则只需一个命令就可以自动生成关于猫的类似报告。
您可以通过在R Markdown文档的YAML标题中定义参数,并为每个参数赋值来完成此操作。例如:
现在,您可以将这些变量写入文档中的R代码,如params 和
years_of_study。如果您正常编织文档,它将根据值变量使用这些参数的默认值进行编织。但是,如果您通过在RStudio的Knit下拉列表中选择此选项来编织参数(或使用knit_with_parameters()),则会出现一个可爱的菜单选项,您可以在编织文档之前选择参数。
用参数编织
8.revealjs
revealjs是一个包,它允许您使用带有嵌入式R代码的直观幻灯片导航菜单以HTML格式创建精美的演示文稿。它可以在R Markdown中使用,并且具有非常直观的HTML快捷方式,允许您使用各种样式选项创建漂亮幻灯片的嵌套逻辑结构。演示文稿是用HTML表示的,这意味着人们可以通过他们的平板电脑或手机听你说话,这非常方便。您可以通过安装包然后在YAML标头中调用它来设置revealjspresentation。这是我最近使用revealjs发表的演讲的YAML标题示例
-- title: "Exporing the Edge of the People Analytics Universe" author: "Keith McNulty" output: revealjs::revealjs_presentation: center: yes template: starwars.html theme: black date: "HR Analytics Meetup London - 18 March, 2019" resource_files: - darth.png - deathstar.png - hanchewy.png - millenium.png - r2d2-threepio.png - starwars.html - starwars.png - stormtrooper.png ---
这是一个示例页面。您可以在此处找到代码和演示文稿hr_meetup_london/presentation.Rmd at master · keithmcnulty/hr_meetup_london · GitHub
使用revealjs轻松进行在线演示
9.R Shiny中的HTML标签(例如,在您的Shiny应用中播放音频)
大多数人没有充分利用R Shiny中提供的HTML标签。有110个标签提供各种HTML格式和其他命令的快捷方式。最近我构建了一个应用程序,花了很长时间来执行任务。知道用户在等待它完成时可能会出现多任务,我使用标签$ audio让应用程序大肆宣传,以便在任务完成时提醒用户。
10.赞美包
这个赞美包非常简单但也很棒,给用户带来了好评。虽然这看起来像是毫无意义的自我钦佩,但它实际上在编写R包时非常有用,如果他们做正确的事情,例如如果一个过程成功完成,你可以向某人提供赞美或鼓励。您也可以将它放在复杂脚本的末尾,以便在成功运行时为您提供额外的快乐。
最初我是一名纯数学家,然后我成为了一名心理测量学家和一名数据科学家。我热衷于将所有这些学科的严谨性应用于复杂的人们问题。我也是一名编码极客,也是日本角色扮演游戏的忠实粉丝。