前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R 语言中常见的 10 个错误,看到第 7 个会不会感觉很神奇?

R 语言中常见的 10 个错误,看到第 7 个会不会感觉很神奇?

作者头像
章鱼猫先生
发布2021-10-15 11:56:55
6.6K0
发布2021-10-15 11:56:55
举报
文章被收录于专栏:BioIT爱好者

翻译:BioIT 爱好者(部分内容有调整) 原文:The top 10 R errors, the 7th one will surprise you

就像你学习走路时遇到了一些问题,你在学习 R 的过程中可能也会遇到一些错误。本文章的目标是对学习 R 时最常见的一些错误进行整理,并一一的去解释它们,以便您了解如何解决这些问题。

面对问题,最重要的建议是:“阅读错误信息”。有些错误信息通常不是很清楚,R 并不是真的很擅长表达它们,但是答案通常就在您的面前。一旦您敢于阅读错误信息,我们将帮助您阅读这些错误信息!

1. could not find function "%>%"

这是一个经典错误,可能发生在%>%或任何其他函数中。

有两种情况会导致出现这样的错误:

CASE 1 : 您拼写错了该函数的名称:

代码语言:javascript
复制
> rnom(1)  # instead rnorm(1)
Error: could not find function "rnom"

Correction : 该如何解决?通过纠正拼写错误。

代码语言:javascript
复制
> rnorm(1)
[1] -0.7503872

CASE 2 : 或者(在大多数情况下)您忘记了加载包含该函数的软件包。

代码语言:javascript
复制
> iris  %>% select(Species)
Error in iris %>% select(Species) : could not find function "%>%"

Correction :

不要忘记在你的脚本和 Rmd 开头安装并启动library(tidyverse)和其他的library(whatever)

代码语言:javascript
复制
library(dplyr)
iris  %>% select(Species)

2. Error: unexpected SPECIAL in "%>%"

错误代码:

代码语言:javascript
复制
library(dplyr)
iris  
%>% select(Species)
代码语言:javascript
复制
## Error: unexpected SPECIAL in %>%
## 2: iris  
## 3: %>%
##    ^

您将换行符放错了位置。

Correction : %>%绝对不能在代码行的开头,您需要在%>%之后而不是之前进行换行。

代码语言:javascript
复制
library(dplyr)
iris  %>% 
  select(Species)

3. Error: unexpected 'else' in "else"

错误代码:

代码语言:javascript
复制
if (  1 != 1 ) {print("youpi")} 
else { print("coucou")}
代码语言:javascript
复制
## Error: unexpected 'else' in "else"
## 1: if (  1 != 1 ) {print("youpi")} 
## 2: else
##    ^

这与第二个错误的问题是一样的。您将换行符放错了位置。

Correction : 你需要检查else是否与前一行正确关联。

R 一次解释一行代码,所以当if没有关联的else代码时,要让你的代码起作用,请确保 R 知道您的指令已完成。

代码语言:javascript
复制
if (  1 != 1 ) {print("youpi")
  } else { print("coucou")}

4. object 'dataset' not found

错误代码:

代码语言:javascript
复制
library(dplyr)
dataset %>% select(Species)
代码语言:javascript
复制
## Error in eval(lhs, parent, parent) : object 'dataset' not found

您正在处理的对象不存在。

Correction :

拼写错误?或你需要确保你在这之前已经启动并分配了该对象。

5. there is no package called 'diplyr'

错误代码:

代码语言:javascript
复制
> library(diplyr)
Error in library(diplyr) : there is no package called ‘diplyr’

出现这样的错误有两种可能:

CASE 1 : 您拼错了库的名字。

Correction :

代码语言:javascript
复制
library(dplyr)

CASE 2 : 该软件包尚未安装。

Correction : 在终端中启动install.packages("dplyr")将解决此问题。

6. non-numeric argument to binary operator

错误代码:

代码语言:javascript
复制
> df + 1
## Error in df + 1 : non-numeric argument to binary operato

这样的报错可能会让人很困惑。

Correction : 确保您的算术运算有意义,并且应用在了正确的对象上。确保该对象包含您期望包含的对象。

在上面的示例中,df是一个函数,而不是数字,从而导致错误。

7. Problem with `filter()` input `..1`.

错误代码:

代码语言:javascript
复制
library(dplyr)
iris %>% filter(Species = "setosa")
代码语言:javascript
复制
## Error: Problem with `filter()` input `..1`.
## x Input `..1` is named.
## i This usually means that you've used `=` instead of `==`.
## i Did you mean `Species == "setosa"`?

在错误消息中包含解决方案。

Correction : 在错误消息中已经给出了如何校正的方法。您只输入了一个=,但条件必须用==编写。

代码语言:javascript
复制
library(dplyr)
iris %>% filter(Species == "setosa")

8. Error: unexpected symbol in:

错误代码:

代码语言:javascript
复制
library(dplyr)
iris %>% filter(Species == "setosa"
iris %>% filter(Species == "setosa")
代码语言:javascript
复制
## Error: <text>:3:1: unexpected symbol
## 2: iris %>% filter(Species == "setosa"
## 3: iris
##    ^

当您发送未完成的行,而您忘记了右括号,大括号或引号时,通常会出现此错误消息。在这种情况下,R 一直等到您的指令结束。但是,您不仅要发送丢失的括号(或括号/引号),而且要再次发送整个指令。Rmd 更加棘手,因为您没办法通过查看终端来检查确实已经发送给 R 的内容。

Correction : 已经修复了!现在,您已收到 R 发送的一条错误消息,重新启动您的指令,即可成功执行。

9. Operation not allowed without an active reactive context. (You tried to do something that can only be done from inside a reactive expression or observer.)

见下文。

10. Can't access reactive value 'go' outside of reactive consumer. Do you need to wrap inside reactive() or observer()?

错误代码:

代码语言:javascript
复制
library(shiny)
ui <- fluidPage(
  actionButton("go","go")
)
server <- function(input, output, session) {
  res <- input$go
}
shinyApp(ui, server)

您使用 Shiny 并尝试在observe()observEvent()reactive()render()之外使用input$。只是这有点不可能。别担心,在您犯错之前,确实也已经有人遇到过同类的错误!

Correction : 您可以在代码周围放置一个observe()

但是,求求您!不应在您的 shiny 应用程序中同时使用observe()reactive()(有时间的话我们将讨论这个问题..),因此,请尝试寻找更好的解决方案……:)

代码语言:javascript
复制
library(shiny)
ui <- fluidPage(
  actionButton("go","go")
)
server <- function(input, output, session) {
  r <- reactiveValues(x=NULL)
  observeEvent( TRUE ,once = TRUE, {
    r$x <- input$go
  })
}
shinyApp(ui, server)

最后

如果你还有其他烦人的经常性错误要分享,请在评论中写下它,一起分享交流!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 BioIT爱好者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. could not find function "%>%"
  • 2. Error: unexpected SPECIAL in "%>%"
  • 3. Error: unexpected 'else' in "else"
  • 4. object 'dataset' not found
  • 5. there is no package called 'diplyr'
  • 6. non-numeric argument to binary operator
  • 7. Problem with `filter()` input `..1`.
  • 8. Error: unexpected symbol in:
  • 9. Operation not allowed without an active reactive context. (You tried to do something that can only be done from inside a reactive expression or observer.)
  • 10. Can't access reactive value 'go' outside of reactive consumer. Do you need to wrap inside reactive() or observer()?
  • 最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档