用3个条件计算一个变量的%突然报错

Calculating % for one variable by 3 conditions suddenly gives an error message

好的,我的 R 代码中有一个 st运行ge 问题。我有一个数据集(实际上它更大):

Stomachdata_2017 = data.frame(Species= c('Herring','Herring','Cod','Cod','Cod','Cod','Shark', 'Shark', 'Shark'),
                FishID= c('1', '1', '2', '2', '3','3','4', '5','5'),
                StomachSp= c('Shrimp','Shrimp','Crab', 'Scad', 'Scad', 'Scad','Fish', 'Whiting', 'Fish'))

我想计算每个唯一鱼种的每个唯一鱼种的 StomachSp 百分比。我之前做过这个计算(见下文):

#Sum for each unique species, FishID and unique stomach content the amount of prey items
    Stomach_perc <- count(unique(Stomachdata_2017), vars = c("Species", "FishID", "StomachSp"))
    Stomach_perc$Occ <- rep(1,nrow(Stomach_perc))
    Stomach_perc<-with(Stomach_perc,aggregate(Occ,by=list(Species=Species,StomachSp=StomachSp),function(x) sum(x)))
    Stomach_perc$Perc <- with(Stomach_perc, ave(x, Species, FUN=prop.table))
    Stomach_perc$Perc <- Stomach_perc$Perc * 100

但是..当我今天再次 运行 代码时,它突然给出了一个错误(?!)我以前从未遇到过..而且我没有更改代码或任何东西。在这个例子中它似乎工作,但是当我将这段代码应用到我的大数据集时它突然停止工作...

Error: Column `vars` must be length 49 (the group size) or one, not 3

谁能帮帮我?这非常令人沮丧...

谢谢

详细说明我的评论,问题出在命名空间上。

假设您昨天加载了 plyr 库,然后继续编写以下代码:

Stomach_perc <- count(unique(Stomachdata_2017), vars = c("Species", "FishID", "StomachSp"))

在这种情况下,count 指的是 plyr 包导出的 count() 函数。在昨天和今天之间的某个时间点,您可能还加载了一些其他包,通常怀疑包括 tidyrdplyr 之类的包。其中一些包还导出函数count()

今天,当您执行完全相同的代码时:

Stomach_perc <- count(unique(Stomachdata_2017), vars = c("Species", "FishID", "StomachSp"))

这一次,count() 可能是从另一个包导出的函数。

当然,具体问题不在于 count():任何具有足够通用名称的函数都可能发生这种情况。因此,使用 dplyr::count() 显式使用该包中的计数函数。

顺便说一句,这是交互式编写代码时非常常见的情况,比如在 R Markdown / R Notebook 格式中。您可能会在某个库中阅读第 43 行,然后返回并在第 20 行 运行 编写代码,您会发现,曾经有效的代码不再有效。命名空间!

Hadley Wickham 的 material on this topic 读起来很棒!

希望这能说明问题。