【问题标题】:filter function in dplyr errors: object 'name' not founddplyr 错误中的过滤功能:找不到对象“名称”
【发布时间】:2021-04-10 09:11:27
【问题描述】:

我在 R 中有一个数据框,例如所谓的UK_profiles:

row.names   id     name
1   1   8131437     Profile
2   2   8131719     WolverineCompetition
3   4   8132011     www.vaseline.com
4   10  23265829    www.keepingskinamazing.co.uk
5   23  8042743     Mobile
6   24  8043312     Test
7   25  90914664    Join Our Core
8   26  45272695    UDF
9   27  50547829    apps.euro-bureau.eu/fairathon
10  28  50916438    www.benjerry.intashop.com/
11  44  83667343    All Web Site Data
12  45  84556272    UK

使用 dplyr 我希望 filter 并使用 grepl 删除行:

require(dplyr) 

UK_profiles.filtered <- filter(UK_profiles, !grepl("Rollup|Microsite|Mobile|Test|tset|Profile|Facebook|Unfiltered|returnurl", name))

但是,我收到一条错误消息:

找不到对象“名称”。

我也明白了:

在 data.matrix(data) 中:强制引入的 NA。

对象'name' 显然在数据框中。有人可以帮忙吗?

【问题讨论】:

  • 您是否加载了dplyr 包? R 中默认有一个filter 函数,它给出了完全相同的错误。加载dplyr (library(dplyr)) 后,filter 函数工作。
  • 为什么选择 dplyr? UK_profiles[ !grepl("Rollup|Microsite|Mobile|Test|tset|Profile|Facebook|Unfiltered|returnurl", UK_profiles$names), ]
  • 嗨@Pascal。是的,我确实加载了包谢谢。
  • @zx8754 是的,好点

标签: r dplyr


【解决方案1】:

我用重启会话重新安装了 rlang 包,它有帮助

【讨论】:

  • 如何重新安装rlang?
【解决方案2】:

要了解为什么会发生这种情况,您可以按照以下步骤直接重新创建错误。

加载 dplyr

dplyr 加载到仅加载默认库的新会话中,filter 将作为dplyrstats 之后加载

library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union

filter(mtcars, mpg < 15)
#>    mpg cyl disp  hp drat    wt  qsec vs am gear carb
#> 1 14.3   8  360 245 3.21 3.570 15.84  0  0    3    4
#> 2 10.4   8  472 205 2.93 5.250 17.98  0  0    3    4
#> 3 10.4   8  460 215 3.00 5.424 17.82  0  0    3    4
#> 4 14.7   8  440 230 3.23 5.345 17.42  0  0    3    4
#> 5 13.3   8  350 245 3.73 3.840 15.41  0  0    3    4

卸载 dplyr

这会导致错误,因为现在尝试使用 stats::filter。通过卸载stats,我们看到另一个错误,根本没有找到名为filter 的函数

detach("package:dplyr")  # Unload dplyr
filter(mtcars, mpg < 15)  # Using stats::filter
#> Error in filter(., mpg < 15): object 'mpg' not found

detach("package:stats")  # Unload stats

filter(mtcars, mpg < 15)    
#> Error in filter(., mpg < 15): could not find function "filter"

重新加载统计数据和 dplyr

确保在stats 之后重新加载dplyr,我们看到filterdplyr 版本再次工作

library(stats)
library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> 
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union

filter(mtcars, mpg < 15)
#>    mpg cyl disp  hp drat    wt  qsec vs am gear carb
#> 1 14.3   8  360 245 3.21 3.570 15.84  0  0    3    4
#> 2 10.4   8  472 205 2.93 5.250 17.98  0  0    3    4
#> 3 10.4   8  460 215 3.00 5.424 17.82  0  0    3    4
#> 4 14.7   8  440 230 3.23 5.345 17.42  0  0    3    4
#> 5 13.3   8  350 245 3.73 3.840 15.41  0  0    3    4

【讨论】:

    【解决方案3】:

    我认为你需要同时安装dplyrinstall.packages("dplyr") 包,然后使用library 命令library(dplyr)dplyr 加载到内存中以供使用。
    例如mtcars 数据集是dplyr 的一部分,如果我只安装dplyr 然后输入head(mtcars) 它找不到它。一旦我使用library 命令,它就会被找到。

    【讨论】:

      【解决方案4】:

      您似乎获得的是stats::filter 函数,而不是dplyr 函数。为确保您得到正确的答案,请使用符号 dplyr::filter

      d = data.frame(x=1:10,
       name=c("foo","bar","baz","bar","bar","baz","fnord","qar","qux","quux"))
      
      filter(d, !grepl("ar|ux", name))
      Error in grepl("ar|ux", name) : object 'name' not found
      
      dplyr::filter(d, !grepl("ar|ux", name))
        x  name
      1 1   foo
      2 3   baz
      3 6   baz
      4 7 fnord
      

      你甚至不需要为这个工作做library(dplyr) - 你确实需要安装dplyr

      这适用于任何包中的函数。

      【讨论】:

      • 你知道为什么会这样吗?
      • 因为 dplyr 被赋予了一个与 R 命名空间中已有的匹配的函数名。
      • @AlanD。如果未指定包dplyr,则会调用R base 中的filter 并导致问题。
      猜你喜欢
      • 2021-10-22
      • 1970-01-01
      • 2021-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多