通过3个条件计算一个变量的%会突然显示错误消息[关闭]

问题描述 投票:0回答:1

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

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'))

我想计算每个独特FishID每个独特物种的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

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

谢谢

r percentage
1个回答
1
投票

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

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

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

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

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

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

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

具体问题当然不是count():它可能发生在具有足够常见名称的任何函数上。因此,使用dplyr::count()显式使用该包中的count函数。

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

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

希望这澄清一下。

© www.soinside.com 2019 - 2024. All rights reserved.