用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()
函数。在昨天和今天之间的某个时间点,您可能还加载了一些其他包,通常怀疑包括 tidyr
或 dplyr
之类的包。其中一些包还导出函数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 读起来很棒!
希望这能说明问题。
好的,我的 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()
函数。在昨天和今天之间的某个时间点,您可能还加载了一些其他包,通常怀疑包括 tidyr
或 dplyr
之类的包。其中一些包还导出函数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 读起来很棒!
希望这能说明问题。