R/rarmultilev.R

#' Calculate rarefied richness at multiple spatial scales
#'
#' @ indf=dataframe containing species incidence data
#' @ splev=grouping factor for different species
#' @ scale1=spatial scale 1 (usually archipelago)
#' @ scale2=spatial scale 2 (usually island)
#' @ scale3=spatial scale 3 (usually plot level)
#'


rarmultilev<-function(indf,splev,scale1=NULL,scale2=NULL,scale3=NULL){
    indf %>% as.data.frame() ->indf
    # Archipelago-Gamma diversity
    if(is.null(scale2)=="TRUE"){
        # extract species level info
        disp.l<-as.character(unique(dplyr::pull(indf,splev)))
        group.rar<-NULL
        for (focaldisp in disp.l){
            indf[indf[,splev] %in% focaldisp,] ->tmp
            # minimum number of records
            tmp %>%
                select(-one_of(c(scale1,splev))) %>%
                rowSums() %>%
                min() ->minrec
            # rarefy
            tmp %>%
                select(-one_of(c(scale1,splev))) %>%
                rarefy(minrec) %>%
                data.frame(Gammar=.) %>%
                mutate(group=focaldisp,Gammar=round(Gammar,digits=2),
                       Archip=tmp[,scale1]) ->tmp.rar
            group.rar<-rbind(tmp.rar,group.rar)
        }
    }
    if(is.null(scale3)=="FALSE"){
        # Plot-level Alpha diversity
        disp.l<-as.character(unique(dplyr::pull(indf,splev)))
        group.rar<-NULL
        for (focaldisp in disp.l){
            indf[indf[,splev] %in% focaldisp,] ->tmp
            # Archipelago-level scale
            scale1.l<-as.character(unique(dplyr::pull(tmp,scale1)))
            for (archip in scale1.l){
                tmp[tmp[,scale1] %in% archip,] ->tmp1
                # Island-level scale
                scale2.l<-as.character(unique(dplyr::pull(tmp1,scale2)))
                for (island in scale2.l){
                    tmp1[tmp1[,scale2] %in% island,] ->tmp2
                    # minimum abundance
                    tmp2 %>%
                        select(-one_of(c(scale1,scale2,scale3,splev))) %>%
                        rowSums() ->rs
                    rs1<-min(rs)
                    # rarefied richness
                    tmp2 %>%
                        select(-one_of(c(scale1,scale2,scale3,splev))) %>%
                        rarefy(rs1) %>%
                        as.numeric() ->rafrich
                    alpha.df<-data.frame(Alphar=rafrich,Archip=archip,group=focaldisp,Island=island)
                    group.rar<-rbind(alpha.df,group.rar)
                }
            }
        }
    }
    return(group.rar)
}
drmarcogir/Rmacdiv documentation built on May 15, 2019, 12:58 p.m.