9  Workflow: getting help

You are reading the work-in-progress second edition of R for Data Science. This chapter is largely complete and just needs final proof reading. You can find the complete first edition at https://r4ds.had.co.nz.

这本书不是一座孤岛;没有任何单一资源可以让您掌握 R。 当您开始将本书中描述的技术应用于您自己的数据时,您很快就会发现我们无法回答的问题。 本节介绍了一些有关如何获得帮助并帮助您继续学习的提示。

9.1 Google is your friend

如果您遇到困难,请从 Google 开始。 通常,在查询中添加 “R” 足以将其限制为相关结果:如果搜索没有用,通常意味着没有任何特定于 R 的结果可用。 此外,添加 “tidyverse” 或 “ggplot2” 之类的包名称将有助于将结果范围缩小到您感觉更熟悉的代码,例如 “how to make a boxplot in R” 对比 “how to make a boxplot in R with ggplot2”。 Google 对于错误消息特别有用。 如果您收到错误消息并且不知道其含义,请尝试使用谷歌搜索! 很可能其他人过去曾对此感到困惑,并且网络上的某个地方会提供帮助。 (如果错误消息不是英文,请运行 Sys.setenv(LANGUAGE = "en") 并重新运行代码;您更有可能找到英文错误消息的帮助。)

如果 Google 没有帮助,请尝试 Stack Overflow。 首先花一点时间搜索现有答案(包括 [R]),将搜索限制为使用 R 的问题和答案。

9.2 Making a reprex

如果你的谷歌搜索没有找到任何有用的东西,那么准备一个 reprex 是一个非常好的主意,它是最小可重现示例(reproducible example)的缩写。 良好的 reprex 可以让其他人更容易地帮助你,而且通常你会在解决问题的过程中自己解决问题。 创建 reprex 有两个部分:

  • 首先,您需要使代码可重现。 这意味着您需要捕获所有内容,即包含任何 library() 调用并创建所有必要的对象。 确保完成此操作的最简单方法是使用 reprex 包。

  • 其次,你需要将其最小化。 去掉与你的问题不直接相关的所有内容。 这通常涉及创建一个比现实生活中所面临的对象小得多且简单得多的 R 对象,甚至使用内置数据。

听起来工作量很大! 确实可以,但它会带来巨大的回报:

  • 80% 的情况下,创建一个出色的 reprex 可以揭示问题的根源。 令人惊奇的是,编写一个独立且最小的示例的过程经常可以让您回答自己的问题。

  • 另外 20% 的时间里,你会以一种其他人容易理解的方式抓住问题的本质。 这大大提高了您获得帮助的机会!

手动创建 reprex 时,很容易意外错过某些内容,这意味着您的代码无法在其他人的计算机上运行。 通过使用 reprex 包来避免此问题,该包作为 tidyverse 的一部分安装。 假设您将此代码复制到剪贴板(或者在 RStudio Server 或 Cloud 上选择它):

y <- 1:4
mean(y)

然后调用 reprex(),其中默认输出针对 GitHub 进行格式化:

reprex::reprex()

渲染良好的 HTML preview 将显示在 RStudio Viewer(如果您使用的是 RStudio)或默认浏览器中。 该 reprex 会自动复制到您的剪贴板(在 RStudio Server 或 Cloud 上,您需要自己复制):

``` r
y <- 1:4
mean(y)
#> [1] 2.5
```

该文本以一种称为 Markdown 的特殊方式进行格式化,可以将其粘贴到 StackOverflow 或 Github 等网站,它们会自动将其呈现为代码。 以下是 Markdown 在 GitHub 上呈现的样子:

y <- 1:4
mean(y)
#> [1] 2.5

其他任何人都可以复制、粘贴并立即运行它。

为了使示例可重现,您需要包含三件事:required packages, data, and code。

  1. Packages 应该在脚本的顶部加载,这样就可以很容易地看到示例需要哪些包。 现在是检查您是否使用每个软件包的最新版本的好时机;您可能发现了一个错误,该错误自您安装或上次更新该软件包以来已得到修复。 对于 tidyverse 中的包,最简单的检查方法是运行 tidyverse_update()

  2. 包含 data 的最简单方法是使用 dput() 生成重新创建数据所需的 R 代码。 例如,要在 R 中重新创建 mtcars 数据集,请执行以下步骤:

    1. Run dput(mtcars) in R
    2. Copy the output
    3. In reprex, type mtcars <-, then paste.

    尝试使用仍能揭示问题的最小数据子集。

  3. 花一点时间确保您的代码易于其他人阅读:

    • 确保您使用了空格,并且变量名称简洁且信息丰富。

    • 使用注释指出您的问题所在。

    • 尽最大努力删除与问题无关的所有内容。

    代码越短,就越容易理解并且更容易修复。

最后,通过启动新的 R 会话并复制和粘贴脚本来检查您是否确实创建了一个可重现的示例。

创建 reprex 并不简单,需要一些练习才能学习创建良好的、真正最小的 reprex。 然而,随着您学习和掌握 R,学习提出包含代码的问题并投入时间使其可重现将继续获得回报。

9.3 Investing in yourself

您还应该花一些时间做好准备,在问题发生之前解决问题。 从长远来看,每天投入一点时间学习 R 将获得丰厚的回报。 一种方法是在 tidyverse blog 上关注 tidyverse 团队正在做的事情。 为了更广泛地了解 R 社区,我们建议阅读 R Weekly:这是社区努力每周汇总 R 社区中最有趣的新闻。

9.4 Summary

本章总结了本书的整个游戏部分。 您现在已经了解了数据科学过程中最重要的部分:可视化(visualization)、转换(transformation)、整理(tidying)、导入(importing)。 现在你已经对整个过程有了一个整体的了解,我们开始深入研究小部分的细节。

本书的下一部分 “Visualize” 深入探讨了图形语法并使用 ggplot2 创建数据可视化,展示了如何使用您迄今为止学到的工具来进行探索性数据分析,并介绍了创建绘图的良好实践用于沟通。