在R大声嘈杂的错误

时间:2015-04-24 13:24:40

标签: r

R似乎对错误处理采取了非常自由放任的立场,行为类似于大多数shell脚本语言。最重要的是,R倾向于在终端上打印大量无害的文本。这使得错误很容易被忽视。我不止一次有一个脚本在早期产生错误,然后愉快地在剩余的计算中传播NaN。只有在对这些离奇的结果感到困惑之后,我才意识到发生了什么。

有经验的R用户如何处理此问题?有没有办法让错误致命或至少更明显?

2 个答案:

答案 0 :(得分:2)

我知道有些人做的一件事就是运行R并将所有警告设置为抛出错误:

options(warn = 2)
> x <- "a"
> as.numeric(x)
Error: (converted from warning) NAs introduced by coercion
> sqrt(-1)
Error in sqrt(-1) : (converted from warning) NaNs produced

显然,这部分是品味问题。但是你应该知道,采用这种方法还将包括来自包的所有警告,其中作者可能或可能没有对应该产生警告的内容的合理定义。因此,您可能会遇到代码,这些代码会生成许多您实际上并不关心的警告。

然后你必须转向在suppressWarnings中包装表达式,以明确地安静你认为无关紧要的那些。

答案 1 :(得分:0)

在我学习任何其他语言之前,我实际上开始使用R编程。我很快就知道尝试编写一个脚本然后运行它只是希望它可以工作是一个坏主意。相反,我会遵循这个过程:

  1. 记下我想要的脚本的输入和输出以及最终目标 来写。
  2. 尝试使用命令行界面步骤实现此目的 一步一步。
  3. 在我成功完成#2后,从R Studio的“历史记录”选项卡中收集生成所需结果所需的所有行。
  4. enter image description here

    1. 测试脚本并尝试进行优化。
    2. 通过这种方式,您可以检查每条线是否正在按照您的意愿行事,我认为这一点非常重要。

      我常常在这里看到人们会做类似的问题:

      MyVec = c(2, 4, 3, 5)
      for(i in MyVec)
      {
          Sum = Sum + MyVec[i]
      } 
      Average = Sum / length(Sum)
      

      注意这样运行没有错误并产生错误的结果!如果他们只是花时间运行:

      for(i in MyVec)
      {
          print(i)
      }
      

      他们会(a)看到他们的错误,并且(b)稍微了解一下R是如何工作的!