发帖指南:如何提出好的问题以促成有用的答案

本指南旨在帮助你充分利用 R 邮件列表,避免尴尬。与列表上发布的许多回复一样,它以简洁的方式编写。这并非出于不友好,更多的是将有限的可用时间和空间分配给技术问题,而不是社交礼仪。

列表:请记住,R 是由志愿者构建和维护的免费软件。他们有各种理由贡献软件并参与邮件列表,但通常时间有限。

礼貌:请记住,习俗不同。有些人非常直接。其他人则用对冲和道歉来表达他们所说的一切。要宽容。粗鲁永远是不合适的,但有时“阅读手册”适当的回应。不要在列表上浪费时间讨论此类事项。人身攻击绝对不合适。

关于统计的问题:R 邮件列表主要用于有关 R 软件的问题和讨论。但是,有时也会发布有关统计方法的问题。如果问题问得很好,并且列表中的某人感兴趣,它可能会引出有益且最新的答案。另请参阅 Usenet 组 sci.stat.consult(应用统计和咨询)和 sci.stat.math(数学统计和概率)。

基础统计和课堂作业:R-help 不适用于这些。

哪个列表:R-help、R-package-devel、R-devel 还是 Bioconductor?现在有两个,现在有三个广泛使用的邮件列表,用于讨论有关 R 的问题,还有一个列表专门用于生物导体包和生物信息学的使用问题。R-help 的目的是让希望使用 R 来解决问题但未必对编程感兴趣或了解编程的人能够理解。R-package-devel 于 2015 年 5 月创建,专门帮助 R 包作者编写和检查他们的 R 包,尤其是那些用于 CRAN 的包。R-devel 用于讨论有关 R 开发和编程的问题。可能引发非程序员无法理解的讨论的问题应转到 R-devel 而不是 R-help。但是,有关包开发的问题,例如通过 R CMD check,应转到 R-package-devel 而不是 R-devel。例如,涉及 C、C++ 等代码的问题应转到 R-devel。涉及纯 R 代码的更一般性问题以及可能引起 R-help 的大量且多样化订阅者感兴趣的问题应转到 R-help。
生物导体用于发布有关 生物导体 开发、新代码可用性、使用生物导体的问题和解决方案的问答等公告。有关详细信息,请参阅 生物导体邮件列表。有关贡献包的问题,请参阅 以下内容

特定于平台的问题:对于 Mac OS X、Debian/Ubuntu 和 Fedora/Redhat 上的 R,分别有 R-sig-MacR-sig-DebianR-sig-Fedora 列表。针对这些平台的具体问题(尤其是 Mac OS X 上的重新安装和 R.app GUI)更有可能在适当的列表中获得见解的回复,这当然也是讨论可能存在的错误的地方。

发帖前做好功课:如果很明显你已经进行了基本的背景调查,那么你更有可能获得内容丰富的回复。另请参阅本页稍后的 其他资源

  • 使用不同的关键字执行 help.search("keyword")apropos("keyword")(在 R 提示符处输入此内容)。
  • 使用不同的关键字执行 RSiteSearch("keyword")(在 R 提示符处)以搜索 R 函数、贡献包和 R-Help 帖子。有关其他选项和限制搜索,请参阅 ?RSiteSearch
  • 阅读相关函数的在线帮助(在 R 提示符处输入 ?functionname,例如 ?prod
  • 如果 R 中似乎有变化,请查看 CRAN 上最新的 NEWS 文件以获取相关信息。
  • 如果可能相关,请搜索 R-faq 和 R-windows-faq(https://cran.r-project.org.cn/faqs.html
  • 至少阅读 R 简介 中的相关部分
  • 如果该函数来自随书附带的包,例如 MASS 包,请在发帖前查阅该书

发帖的技术细节:有关以下内容的更多详细信息,请参阅 一般说明

  • 禁止发布 HTML(更难以检测垃圾邮件)(请注意,这是某些邮件客户端中的默认设置 - 您可能需要将其关闭)。请注意,“HTML 化”的电子邮件被完全拦截的可能性已经变得相对较高(不会通知发件人)。
  • 除了 PS、PDF 以及一些图像和存档格式外,禁止使用二进制附件(其他附件会自动被剥离,因为它们可能包含恶意软件)。其他格式和较大的文件应放在网络上,只发布其 URL。这样,读者可以选择下载或不下载它们。
  • 使用信息丰富的主题行(不要使用诸如“问题”之类的主题行)
  • 对于新主题,撰写新邮件并特别包含“[email protected]”(或“[email protected]”)地址。(回复现有帖子然后更改主题会搞乱存档中的线程以及许多人的邮件阅读器。)
  • 如果您无法从一个简单接受回复的电子邮件地址发送邮件,请在您的帖子中说明这一点,以便人们在尝试回复您的邮件时不会感到不便
  • 有些人认为包含一个简明签名来指定关联关系是一种礼貌行为

令人惊讶的行为和错误:您认为是错误的内容可能是许多其他内容,例如您不喜欢的默认行为、一个特性、一个未记录的特性或文档中的错误。您不必为了提问而让自己局限于其中之一。如果它是一个真正的错误,有人会注意到它。在您发布真正的错误报告之前,请务必阅读 R-faq 中的R 错误。如果您完全不确定某事是否是一个错误,请向 r-help 发布一个问题,而不是向 r-bugs 发布错误报告 - 每个错误报告都需要 R 核心成员手动操作。此外,请参阅 Simon Tatham 关于如何有效报告错误的文章。

对于有关意外行为或可能错误的问题,您至少应该将 sessionInfo() 的输出复制并粘贴到您的邮件中。在提及版本号时,请始终使用完整版本号,例如“2.6.1”,而不仅仅是“2.6”,还要提及平台(Windows、Linux、MacOS X,及其版本)。其他可能相关的详细信息包括语言环境(在 R 提示符下键入 Sys.getlocale()),以及您是安装了 R 的预编译二进制版本还是自己编译的。如果函数不在“base”包中,请包含 library(help=thatPackage) 的标头输出。如果您正在使用旧版本的 R 并且认为它无法正常工作,请在发布之前升级到最新版本并尝试一下。如果可能,请尝试当前的 R 补丁或 R-devel 版本的 R(有关详细信息,请参阅常见问题解答),以查看问题是否已得到解决。

对 CRAN 贡献包中的错误通常应直接报告给包维护者(由命令 maintainer("package-name") 报告)。您还可能能够从包维护者那里获得有关问题的帮助。

不要说“R 崩溃了”,您可能认为这意味着 R 给出了一个错误并终止了您的代码片段,但大多数人会认为这是 R 程序的异常终止。确切地说出发生了什么,包括您收到的任何错误消息。

示例:有时提供一个示例会很有帮助,人们可以实际运行。例如

  If I have a matrix x as follows:
  > x <- matrix(1:8, nrow=4, ncol=2,
                dimnames=list(c("A","B","C","D"), c("x","y"))
  > x
    x y
  A 1 5
  B 2 6
  C 3 7
  D 4 8
  >

  how can I turn it into a dataframe with 8 rows, and three
  columns named `row', `col', and `value', which have the
  dimension names as the values of `row' and `col', like this:
  > x.df
     row col value
  1    A   x      1
   ...
  (To which the answer might be:
  > x.df <- reshape(data.frame(row=rownames(x), x), direction="long",
                    varying=list(colnames(x)), times=colnames(x),
                    v.names="value", timevar="col", idvar="row")
  )

提供示例时,最好提供一个构造数据的 R 命令,如上方的 matrix() 表达式。对于更复杂的数据结构,dump("x", file=stdout()) 将打印一个表达式,该表达式将重新创建对象 x

其他资源:在发帖之前不总是咨询这些资源是可以的,除非您有一个非常普遍的问题,并且文档的主题表明立即相关。响应可能只是将您指向其中一个资源。

回复其他帖子

  • 一般来说,对列表和发帖人都进行回复。这将导致你的回复被存档,发帖人将看到你的答案。
  • 粗鲁和人身攻击的评论是不可接受的。简洁是可以的。
  • 在引用他人的评论时,要尊重他们的权利,例如,总结 此处。特别是
    • 未经许可,绝不引用私人消息。
    • 原始作者和含义应始终清晰。
  • 引用先前消息的全文是惯例。
  • 如果你编辑了先前消息中的引用文本,请包含足够的上下文,以便即使在以后的某个时间单独引用你的存档消息,内容也能清晰。
  • 在回答非常简单的问题时,请使用以下算法
    1. 撰写你的回复
    2. 在 R 提示符处键入 4*runif(1),并等待这么多个小时
    3. 检查 R-help 中是否有新帖子;如果没有类似的建议,请发布你的回复
    (这部分是开玩笑,但如果你立即知道为什么建议这样做,你可能应该使用它!此外,用你使用 R 或 S-plus 的年数替换 4 是个不错的主意。)

常见的发帖错误

  • 缺少或非具体的消息主题
  • 在发帖提问之前不做基础功课
  • 不比“函数 xxx 不起作用”更具体
  • 过于具体,没有说明你的真正目标。
  • 在有关意外行为的问题中不包括版本和操作系统信息。
  • 在最新版本中已修复的旧版 R 中找到一个 bug。
  • 声称某事是一个 bug,而实际上该软件按预期工作并有文档记录,只是不符合你的预期。
  • 声称某些常用函数的行为不合理(如果你发现行为奇怪,在阅读相关文档后,询问其行为方式会更有成效且更礼貌。)
  • 威胁说如果你无法得到问题的答案,就不用该软件。即使是作为事实陈述,这也会产生消极的态度。

最后的话

提出好的问题是一项技能。如果你一开始没有得到对你来说有用的答案,不要灰心。简洁且在技术上准确的回复可能就是这样,而不是故意的贬低。如果你对你的帖子中的一些回复感到侮辱,不要急于做出回应——你很可能会后悔。阅读 Eric Raymond 的文章 如何以聪明的方式提问,以获取更多建议,并深入了解人们在技术邮件列表上的行为(但不要尝试向 catb.org 上的人询问有关 R 的问题)。

发帖人应注意,R 列表是公开讨论列表,您发布的任何内容都将被存档并可通过多个网站访问多年。

由 Tony Plate(tplate at acm dot org)编译,最近更新于 2013 年 7 月