dplyr group_by函数出错,找不到对象

时间:2016-07-22 11:09:30

标签: r dplyr

我问这个问题是因为,作为R的新手,我很好奇为什么我编写的代码可以正常工作,然后同一行代码会在下次运行时产生错误。

以下是我正在使用的表的示例。

输入:

structure(list(a5species = structure(c(4L, 1L, 6L, 3L, 14L, 3L, 
8L, 8L, 8L, 8L, 8L, 8L, 3L, 4L, 4L, 8L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 8L, 8L, 8L, 8L, 8L, 8L, 4L, 8L, 8L, 8L, 3L, 8L, 8L, 8L, 
12L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 
8L, 8L, 8L, 8L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 3L, 4L, 3L, 6L, 
3L, 4L, 4L, 3L, 3L, 6L, 6L, 3L, 3L, 3L, 3L, 3L, 3L, 6L, 3L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 8L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 1L, 4L, 3L, 3L, 3L, 4L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 3L, 
4L, 8L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 3L, 12L, 12L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 13L, 4L, 4L, 4L, 6L, 4L, 3L, 
12L, 14L, 6L, 3L, 3L, 4L, 4L, 10L, 4L, 3L, 3L, 3L, 3L, 10L, 4L, 
4L, 4L, 4L, 12L, 4L, 4L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 6L, 5L, 4L, 10L, 12L, 4L, 4L, 3L, 6L, 4L, 3L, 
4L), .Label = c("coustani", "demeilloni", "funestus", "gambiae", 
"garnhami", "indetermine", "marshallii", "pharoensis", "pretoriensis", 
"rufipes", "salbaii", "squamosus", "tenebrosus", "ziemani"), class = "factor"), 
    Vila = c("Motaze", "Motaze", "Motaze", "Motaze", "Motaze", 
    "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", 
    "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", 
    "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", 
    "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", 
    "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", 
    "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", 
    "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", 
    "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", 
    "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", 
    "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", 
    "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", 
    "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", 
    "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", 
    "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", 
    "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", 
    "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", 
    "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", 
    "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", 
    "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", "Motaze", 
    "Motaze", "Motaze", "Motaze", "Chicutso", "Chicutso", "Chicutso", 
    "Chicutso", "Chicutso", "Chicutso", "Chicutso", "Chicutso", 
    "Chicutso", "Chicutso", "Chicutso", "Chicutso", "Chicutso", 
    "Chicutso", "Chicutso", "Chicutso", "Chicutso", "Chicutso", 
    "Chicutso", "Chicutso", "Chicutso", "Chicutso", "Chicutso", 
    "Chicutso", "Chicutso", "Chicutso", "Chicutso", "Chicutso", 
    "Chicutso", "Chicutso", "Chicutso", "Chicutso", "Chicutso", 
    "Chicutso", "Chicutso", "Chicutso", "Chicutso", "Chicutso", 
    "Chicutso", "Chicutso", "Chicutso", "Chicutso", "Chicutso", 
    "Chicutso", "Chicutso", "Chicutso", "Chicutso", "Chicutso", 
    "Chicutso", "Chicutso", "Chicutso", "Chicutso", "Chicutso", 
    "Chicutso", "Chicutso", "Chicutso", "Chicutso", "Chicutso", 
    "Chicutso", "Chicutso", "Chicutso", "Chicutso", "Chicutso", 
    "Chicutso", "Chicutso", "Panjane", "Panjane", "Panjane", 
    "Panjane", "Panjane", "Panjane", "Panjane", "Panjane", "Panjane", 
    "Panjane", "Panjane", "Panjane", "Panjane", "Panjane", "Magude", 
    "Magude", "Magude", "Magude", "Magude", "Magude", "Magude", 
    "Magude", "Magude", "Magude", "Magude", "Magude", "Magude", 
    "Magude", NA, NA, "Muginge", "Muginge", "Muginge", "Muginge", 
    "Muginge", "Muginge", "Muginge", "Muginge", "Muginge", "Muginge", 
    "Muginge", "Muginge", "Muginge", "Muginge", "Muginge", "Muginge", 
    "Muginge", "Muginge", "Muginge", "Muginge", "Muginge", "Muginge", 
    "Muginge", "Muginge", "Muginge", "Muginge", "Muginge", "Muginge", 
    "Muginge", "Muginge", "Muginge", "Muginge", "Muginge", "Muginge", 
    "Muginge", "Muginge", "Muginge", "Muginge", "Muginge", "Muginge", 
    "Muginge", "Muginge", "Muginge", "Muginge", "Muginge", "Muginge", 
    "Muginge", "Muginge", "Muginge", "Muginge", "Muginge", "Muginge", 
    "Muginge", "Muginge", "Muginge", "Muginge", "Muginge", "Muginge", 
    "Muginge", "Muginge", "Muginge", "Muginge", "Muginge", "Muginge", 
    "Muginge", "Muginge", "Muginge", "Muginge", "Muginge", "Muginge", 
    "Muginge", "Muginge", "Muginge", "Muginge", "Muginge", "Muginge", 
    "Muginge", "Muginge", "Muginge", "Muginge", NA, NA, "Muginge", 
    "Muginge", "Muginge", "Muginge", "Muginge", "Muginge", "Muginge", 
    "Muginge", "Muginge", "Muginge", "Mapulanguene", "Mapulanguene", 
    "Mapulanguene", "Mapulanguene", "Mapulanguene", "Mapulanguene", 
    "Mapulanguene", "Mapulanguene", "Mapulanguene", "Mapulanguene", 
    "Mapulanguene", "Mapulanguene")), class = c("tbl_df", "tbl", 
"data.frame"), row.names = c(NA, -321L), .Names = c("a5species", 
"Vila"))

我用这个代码来组织Vila的物种:

test %>% + group_by(Vila) %>% filter(a5species=="gambiae") %>%  + summarise(n=n())

使用此代码生成了我想要的表,但下次我尝试运行代码时它停止工作并产生错误:

Error in group_by_(.data, .dots = lazyeval::lazy_dots(...), add = add) : 
  object 'Vila' not found

我意识到这与此处发布的问题类似: R object not found if defined within a function when using data.table dplyr

但是我使用的是dplyr_0.4.3,这个问题表明他们遇到的问题现在已经解决了,而且我的代码也确实在某一点上运行了。此外,关于这篇文章的讨论是非常技术性的,它超越了我的脑海。

知道为什么我的代码突然停止工作了吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

当我们从带有+符号的R控制台复制代码时,会发生这种情况。 +表示代码不完整。我们可以手动删除+符号,也可以将代码复制并粘贴到一个好的编辑器中以删除它们。

test %>%
    group_by(Vila) %>%
    filter(a5species=="gambiae") %>%
    summarise(n=n())

OP的代码

test %>% + group_by(Vila) %>% filter(a5species=="gambiae") %>%  + summarise(n=n())
         ^^                                                     ^^
  

group_by _(。data,.dots = lazyeval :: lazy_dots(...),add = add)出错   :对象'维拉'找不到