# FlowerMate

    library(FlowerMate)

FlowerMate computes the original reciprocity indexes of Sánchez et al. (2008, 2013) and Armbruster et al (2017), and their multidimensional variants, developed by Simón-Porcar et al. (2023). These indexes are applicable to common heterostylous populations and to any other type of stylar dimorphic and trimorphic populations, such as stylar-dimorphic, three-dimensional heterostylous and enantiostylous plants. FlowerMate includes a main function, inaccuracy, that computes either the one-, two- or three-dimensional versions of the Reciprocity and Inaccuracy Indexes, either for dimorphic or trimorphic populations, depending on the data input and options chosen. The input format includes one row per measured sex organ and the eight following columns: population code, floral morph, Individual ID number, Sex organ ID number, Sex organ type (stigma or anther), and x, y, z coordinates. The user can select the coordinates to compute, hence obtaining either uni-, bi- or three-dimensional indexes. In stylar polymorphic species with same sex organs at stricklingly different locations (e.g. enantiostylous flowers with both left- and right-facing stamens), the user can select different data subsets for computation. inaccuracy computes the Reciprocity and Inaccuracy Indexes also in presence of missing data, warning that the values may not be comparable across populations (e.g. if the distribution of missing data is strongly biased across morphs or dimensions). There are short and extended output options for inaccuracy, providing either the Reciprocity and Inaccuracy values alone or accompanied of all the intermediate components calculated for each population. FlowerMate also includes functions to simulate style-polymorphic populations with the average coordinates and variance specified for each sex organ level and morph.

The objective of this vignete is to illustrate the usage of the different functions and arguments of the FlowerMate package. The first step is to install and load the package:

    install.packages(FlowerMate)
    library(FlowerMate)

These above first two lines are not working yet (not in CRAN), we should use instead: source(“FlowerMate_1.0.R”)

# Basic input data format

As mentioned above, the input dataset must contain at least 8 columns, being three of them for coordinates x, y and z. We can use the function `SimDimor()` to produce example dimorphic dataset and visualize the content of the input matrices.

This is a matrix with only 2 individuals from a single population, with 3D measurements for one stamen and one anther each (using all the defaults parameters, large and short morphs show around 20 and 8 cm length in all dimensions):

    ## this is just you to get this same random example in your computer
    set.seed(1234)
    SimDimor(NIDL = 2, NIDS = 2)
    #>   pop_code morph ID_indiv ID_sexorg sexorg         x         y         z
    #> 1    test1     L        1         1     ST 19.396467 19.717774 19.744495
    #> 2    test1     L        1         2     AN 20.138715 19.554981 19.544402
    #> 3    test1     L        2         3     ST  8.542221  7.761404  7.581414
    #> 4    test1     L        2         4     AN  6.827151  7.500807  9.207918
    #> 5    test1     S        3         5     ST  8.214562  7.611873  8.067044
    #> 6    test1     S        3         6     AN  8.253028  8.032229  7.754657
    #> 7    test1     S        4         7     ST 19.712630 20.479747 19.779726
    #> 8    test1     S        4         8     AN 19.726684 19.944857 20.229795

We can also produce data for 2D and 1D setting mean and sd values to 0 as follow:

    ## this is just you to get this same random example in your computer
    set.seed(1234)
    SimDimor(NIDL = 2, NIDS = 2,
    LSTmeanZ = 0, LSTsdZ = 0, LANmeanZ = 0, LANsdZ = 0,
    SSTmeanZ = 0, SSTsdZ = 0, SANmeanZ = 0, SANsdZ = 0)
    #>   pop_code morph ID_indiv ID_sexorg sexorg         x         y z
    #> 1    test1     L        1         1     ST 19.396467 19.717774 0
    #> 2    test1     L        1         2     AN 20.138715 19.554981 0
    #> 3    test1     L        2         3     ST  8.542221  7.761404 0
    #> 4    test1     L        2         4     AN  6.827151  7.500807 0
    #> 5    test1     S        3         5     ST  8.214562  7.611873 0
    #> 6    test1     S        3         6     AN  8.253028  8.032229 0
    #> 7    test1     S        4         7     ST 19.712630 20.479747 0
    #> 8    test1     S        4         8     AN 19.726684 19.944857 0

    ## this is just you to get this same random example in your computer
    set.seed(1234)
    SimDimor(NIDL = 2, NIDS = 2,LSTmeanX = 0, LSTsdX = 0,
    LANmeanX = 0, LANsdX = 0, SSTmeanX = 0, SSTsdX = 0, SANmeanX = 0, SANsdX = 0,
    LSTmeanZ = 0, LSTsdZ = 0, LANmeanZ = 0, LANsdZ = 0,
    SSTmeanZ = 0, SSTsdZ = 0, SANmeanZ = 0, SANsdZ = 0)
    #>   pop_code morph ID_indiv ID_sexorg sexorg x         y z
    #> 1    test1     L        1         1     ST 0 19.396467 0
    #> 2    test1     L        1         2     AN 0 20.138715 0
    #> 3    test1     L        2         3     ST 0  8.542221 0
    #> 4    test1     L        2         4     AN 0  6.827151 0
    #> 5    test1     S        3         5     ST 0  8.214562 0
    #> 6    test1     S        3         6     AN 0  8.253028 0
    #> 7    test1     S        4         7     ST 0 19.712630 0
    #> 8    test1     S        4         8     AN 0 19.726684 0

Note that dimensions with no data must be represented in the input dataset with 0

The code above generates tiny inputs to visualize the content, but we can produce larger dataset to illustrate the analyses of real dataset. In addition, the above examples use most of the default arguments (mainly mean and standard deviation values). The lines below will produce four more realistic dataset for: 1) one enantiostylous population; 2) one distylous population; 3) one distylous population with multiple sexual organs; and 4) one tristylous population. The first example contains 3D data whereas the three remaining contains 1D data:

    set.seed(1111)
    enantiostylous.dat<- SimDimor (NIDL=20, NIDS=20,Nst=1,Nan=3,Norg.st=1,Norg.an=1,
    LSTmeanX=-10, LSTsdX=2, LANmeanX=c(9,7,-7),LANsdX=c(2,2,2),
    SSTmeanX=9, SSTsdX=2, SANmeanX=c(-9,-6,6), SANsdX=c(2,2,2),
    LSTmeanY=9, LSTsdY=2, LANmeanY=c(7,3,3) ,LANsdY=c(2,2,2),
    SSTmeanY=8, SSTsdY=2, SANmeanY=c(6,2,3), SANsdY=c(2,2,2),
    LSTmeanZ=15, LSTsdZ=2, LANmeanZ=c(16,15,15) ,LANsdZ=c(2,2,2),
    SSTmeanZ=16, SSTsdZ=2, SANmeanZ=c(15,15,15), SANsdZ=c(2,2,2),
    pop_code="enantiostylous")

    set.seed(2222)
    distylous.dat <- SimDimor (NIDL=20, NIDS=20,Nst=1,Nan=1,Norg.st=1,Norg.an=1,
    LSTmeanX=0, LSTsdX=0, LANmeanX=0,LANsdX=0,
    SSTmeanX=0, SSTsdX=0, SANmeanX=0, SANsdX=0,
    LSTmeanY=8, LSTsdY=1, LANmeanY=4 ,LANsdY=1,
    SSTmeanY=5, SSTsdY=1, SANmeanY=9, SANsdY=1,
    LSTmeanZ=0, LSTsdZ=0, LANmeanZ=0 ,LANsdZ=0,
    SSTmeanZ=0, SSTsdZ=0, SANmeanZ=0, SANsdZ=0,
    pop_code="distylous")

    set.seed(3333)
    styledimor.2antherwhorl.dat <- SimDimor (NIDL=20, NIDS=20,Nst=1,Nan=2,Norg.st=1,Norg.an=1,
    LSTmeanX=0, LSTsdX=0, LANmeanX=c(0,0),LANsdX=c(0,0),
    SSTmeanX=0, SSTsdX=0, SANmeanX=c(0,0), SANsdX=c(0,0),
    LSTmeanY=8, LSTsdY=1, LANmeanY=c(6,5) ,LANsdY=c(1,1),
    SSTmeanY=4, SSTsdY=1, SANmeanY=c(6,5), SANsdY=c(1,1),
    LSTmeanZ=0, LSTsdZ=0, LANmeanZ=c(0,0) ,LANsdZ=c(0,0),
    SSTmeanZ=0, SSTsdZ=0, SANmeanZ=c(0,0), SANsdZ=c(0,0),
    pop_code="styledimorphic")

    set.seed(4444)
    tristylous.dat <-SimTrimor(NIDL=20,NIDM=20,NIDS=20,
    LUPmeanX=0, LUPsdX=0, LBWmeanX=0 ,LBWsdX=0, LLWmeanX=0, LLWsdX=0,
    MUPmeanX=0, MUPsdX=0, MBWmeanX=0 ,MBWsdX=0, MLWmeanX=0, MLWsdX=0,
    SUPmeanX=0, SUPsdX=0, SBWmeanX=0 ,SBWsdX=0, SLWmeanX=0, SLWsdX=0,
    LUPmeanY=12, LUPsdY=2, LBWmeanY=8 ,LBWsdY=2, LLWmeanY=4, LLWsdY=2,
    MUPmeanY=12, MUPsdY=2, MBWmeanY=8 ,MBWsdY=2, MLWmeanY=4, MLWsdY=2,
    SUPmeanY=12, SUPsdY=2, SBWmeanY=8 ,SBWsdY=2, SLWmeanY=4, SLWsdY=2,
    LUPmeanZ=0, LUPsdZ=0, LBWmeanZ=0 ,LBWsdZ=0, LLWmeanZ=0, LLWsdZ=0,
    MUPmeanZ=0, MUPsdZ=0, MBWmeanZ=0 ,MBWsdZ=0, MLWmeanZ=0, MLWsdZ=0,
    SUPmeanZ=0, SUPsdZ=0, SBWmeanZ=0 ,SBWsdZ=0, SLWmeanZ=0, SLWsdZ=0,
    pop_code="tristylous")

# Estimating indexes

## Dimorphic, default arguments

    inaccuracy(enantiostylous.dat)
    #>                nL nS  Inac.u  Inac.d Inac.perc.u Inac.perc.d TotalInac
    #> enantiostylous 20 20 181.864 168.453      51.914      48.086   350.317
    #>                Mean2Stand.TotalInac     r      R
    #> enantiostylous                1.062 0.881 -2.009
    inaccuracy(distylous.dat)
    #>           nL nS Inac.u Inac.d Inac.perc.u Inac.perc.d TotalInac
    #> distylous 20 20 12.807 12.261      51.089      48.911    25.068
    #>           Mean2Stand.TotalInac     r      R
    #> distylous                0.597 0.609 -0.915
    inaccuracy(styledimor.2antherwhorl.dat)
    #>                nL nS Inac.u Inac.d Inac.perc.u Inac.perc.d TotalInac
    #> styledimorphic 20 20  7.565  5.617      57.387      42.613    13.182
    #>                Mean2Stand.TotalInac    r      R
    #> styledimorphic                0.395 0.49 -0.275
    inaccuracy(tristylous.dat)
    #>            nL nS nM Inac.u Inac.d Inac.b, Inac.perc.u Inac.perc.d Inac.perc.b
    #> tristylous 20 20 20 28.729 29.044   16.57      38.644      39.068      22.289
    #>            TotalInac Mean2Stand.TotalInac     r     R
    #> tristylous    74.343                1.091 0.382 0.207

## Dimorphic, ignoring coordinates

Lets take a look on the arguments. First, we can analyse every dimension (or any subset of dimensions) separately using useonly.dim. Thus, we can analyse any subset of dimensions in the enantiostylous dataset:

    inaccuracy(enantiostylous.dat)
    #>                nL nS  Inac.u  Inac.d Inac.perc.u Inac.perc.d TotalInac
    #> enantiostylous 20 20 181.864 168.453      51.914      48.086   350.317
    #>                Mean2Stand.TotalInac     r      R
    #> enantiostylous                1.062 0.881 -2.009
    inaccuracy(enantiostylous.dat, useonly.dim = c("x"))
    #>                nL nS  Inac.u  Inac.d Inac.perc.u Inac.perc.d TotalInac
    #> enantiostylous 20 20 148.085 141.799      51.084      48.916   289.884
    #>                Mean2Stand.TotalInac     r      R
    #> enantiostylous                4.809 1.704 -14.22
    inaccuracy(enantiostylous.dat, useonly.dim = c("y"))
    #>                nL nS Inac.u Inac.d Inac.perc.u Inac.perc.d TotalInac
    #> enantiostylous 20 20 27.657 19.179       59.05       40.95    46.836
    #>                Mean2Stand.TotalInac     r      R
    #> enantiostylous                1.808 1.076 -4.864

## Dimorphic, getting a detailed ouput including a complete list of indices estimated during the computation.

### verbose output

    inaccuracy(enantiostylous.dat, verbose=TRUE)
    #> $Result
    #>                nL nS  Inac.u  Inac.d Inac.perc.u Inac.perc.d TotalInac
    #> enantiostylous 20 20 181.864 168.453      51.914      48.086   350.317
    #>                Mean2Stand.TotalInac     r      R
    #> enantiostylous                1.062 0.881 -2.009
    #>
    #> $Armbruster
    #>                             [,1]
    #> Mean.ST.u.x           -0.1211759
    #> Mean.ST.u.y            5.6688235
    #> Mean.ST.u.z           15.3633263
    #> Mean.AN.u.x            0.7657808
    #> Mean.AN.u.y            4.4920783
    #> Mean.AN.u.z           14.9364003
    #> Mean.ST.d.x            0.5184849
    #> Mean.ST.d.y            4.2489372
    #> Mean.ST.d.z           15.5668827
    #> Mean.AN.d.x            0.1860686
    #> Mean.AN.d.y            5.5190979
    #> Mean.AN.d.z           15.1227286
    #> Mean.ALL.x             0.4066072
    #> Mean.ALL.y             4.9939111
    #> Mean.ALL.z            15.1384495
    #> Inac.u.xyz           181.8644592
    #> Inac.d.xyz           168.4526335
    #> Inac.perc.u           51.9142408
    #> Inac.perc.d           48.0857592
    #> TotalInac            350.3170927
    #> Mean2Stand.TotalInac   1.0619392
    #>
    #> $Sanchez
    #>         rL       sdrL         rS       sdrS          r        sdr          R
    #>  0.6370448  0.3423479  0.6083007  0.3408080  0.8808268  0.3415779 -2.0087101
    inaccuracy(distylous.dat, verbose=TRUE)
    #> $Result
    #>           nL nS Inac.u Inac.d Inac.perc.u Inac.perc.d TotalInac
    #> distylous 20 20 12.807 12.261      51.089      48.911    25.068
    #>           Mean2Stand.TotalInac     r      R
    #> distylous                0.597 0.609 -0.915
    #>
    #> $Armbruster
    #>                            [,1]
    #> Mean.ST.u.x           0.0000000
    #> Mean.ST.u.y           6.1709550
    #> Mean.ST.u.z           0.0000000
    #> Mean.AN.u.x           0.0000000
    #> Mean.AN.u.y           6.6945614
    #> Mean.AN.u.z           0.0000000
    #> Mean.ST.d.x           0.0000000
    #> Mean.ST.d.y           6.8632219
    #> Mean.ST.d.z           0.0000000
    #> Mean.AN.d.x           0.0000000
    #> Mean.AN.d.y           6.1820935
    #> Mean.AN.d.z           0.0000000
    #> Mean.ALL.x            0.0000000
    #> Mean.ALL.y            6.4777080
    #> Mean.ALL.z            0.0000000
    #> Inac.u.xyz           12.8071801
    #> Inac.d.xyz           12.2612261
    #> Inac.perc.u          51.0889285
    #> Inac.perc.d          48.9110715
    #> TotalInac            25.0684062
    #> Mean2Stand.TotalInac  0.5974258
    #>
    #> $Sanchez
    #>         rL       sdrL         rS       sdrS          r        sdr          R
    #>  0.4372564  0.3147873  0.4234320  0.3144124  0.6086771  0.3145998 -0.9148973
    inaccuracy(styledimor.2antherwhorl.dat, verbose=TRUE)
    #> $Result
    #>                nL nS Inac.u Inac.d Inac.perc.u Inac.perc.d TotalInac
    #> styledimorphic 20 20  7.565  5.617      57.387      42.613    13.182
    #>                Mean2Stand.TotalInac    r      R
    #> styledimorphic                0.395 0.49 -0.275
    #>
    #> $Armbruster
    #>                            [,1]
    #> Mean.ST.u.x           0.0000000
    #> Mean.ST.u.y           6.6296508
    #> Mean.ST.u.z           0.0000000
    #> Mean.AN.u.x           0.0000000
    #> Mean.AN.u.y           4.9335541
    #> Mean.AN.u.z           0.0000000
    #> Mean.ST.d.x           0.0000000
    #> Mean.ST.d.y           5.3712871
    #> Mean.ST.d.z           0.0000000
    #> Mean.AN.d.x           0.0000000
    #> Mean.AN.d.y           6.3920654
    #> Mean.AN.d.z           0.0000000
    #> Mean.ALL.x            0.0000000
    #> Mean.ALL.y            5.7753628
    #> Mean.ALL.z            0.0000000
    #> Inac.u.xyz            7.5645392
    #> Inac.d.xyz            5.6171002
    #> Inac.perc.u          57.3869379
    #> Inac.perc.d          42.6130621
    #> TotalInac            13.1816394
    #> Mean2Stand.TotalInac  0.3951945
    #>
    #> $Sanchez
    #>         rL       sdrL         rS       sdrS          r        sdr          R
    #>  0.3665220  0.2870184  0.3257386  0.2331246  0.4903509  0.2600715 -0.2752630
    inaccuracy(tristylous.dat, verbose=TRUE)
    #> $Result
    #>            nL nS nM Inac.u Inac.d Inac.b, Inac.perc.u Inac.perc.d Inac.perc.b
    #> tristylous 20 20 20 28.729 29.044   16.57      38.644      39.068      22.289
    #>            TotalInac Mean2Stand.TotalInac     r     R
    #> tristylous    74.343                1.091 0.382 0.207
    #>
    #> $Armbruster
    #>                           [,1]
    #> Mean.ST.u.x           0.000000
    #> Mean.ST.u.y          12.082536
    #> Mean.ST.u.z           0.000000
    #> Mean.AN.u.x           0.000000
    #> Mean.AN.u.y           9.367871
    #> Mean.AN.u.z           0.000000
    #> Mean.ST.d.x           0.000000
    #> Mean.ST.d.y           4.266537
    #> Mean.ST.d.z           0.000000
    #> Mean.AN.d.x           0.000000
    #> Mean.AN.d.y           7.366806
    #> Mean.AN.d.z           0.000000
    #> Mean.ALL.x            0.000000
    #> Mean.ALL.y            8.234141
    #> Mean.ALL.z            0.000000
    #> Inac.u.xyz           28.728893
    #> Inac.d.xyz           29.043963
    #> Inac.perc.u.xyz      38.643787
    #> Inac.perc.d.xyz      39.067595
    #> TotalInac            74.342851
    #> Mean2Stand.TotalInac  1.091441
    #>
    #> $Sanchez
    #>       rUP     sdrUP      rLOW    sdrLOW       rBW     sdrBW         r       sdr
    #> 0.3200462 0.2372732 0.2355012 0.1865024 0.2482535 0.1999195 0.3815272 0.2078984
    #>         R
    #> 0.2068111

### intramorph comparisons only.

    inaccuracy(enantiostylous.dat, intramorph=TRUE)
    #>                nL nS  Inac.L  Inac.S Inac.perc.L Inac.perc.S TotalInacINTRA
    #> enantiostylous 20 20 191.917 154.818       55.35       44.65        346.735
    #>                Mean2Stand.TotalInacINTRA     r      R
    #> enantiostylous                     1.051 0.873 -1.997
    inaccuracy(distylous.dat, intramorph=TRUE)
    #>           nL nS Inac.L Inac.S Inac.perc.L Inac.perc.S TotalInacINTRA
    #> distylous 20 20 12.873 11.486      52.849      47.151         24.359
    #>           Mean2Stand.TotalInacINTRA     r      R
    #> distylous                     0.581 0.598 -0.861
    inaccuracy(styledimor.2antherwhorl.dat, intramorph=TRUE)
    #>                nL nS Inac.L Inac.S Inac.perc.L Inac.perc.S TotalInacINTRA
    #> styledimorphic 20 20  5.878  3.633      61.799      38.201          9.511
    #>                Mean2Stand.TotalInacINTRA    r     R
    #> styledimorphic                     0.285 0.42 0.101
    inaccuracy(tristylous.dat, intramorph=TRUE)
    #>            Inac.L Inac.S Inac.M Inac.perc.L Inac.perc.S Inac.perc.M
    #> tristylous 50.255 47.298 24.236      41.264      38.836        19.9
    #>            TotalInacINTRA Mean2Stand.TotalInacINTRA
    #> tristylous        121.789                     1.788

### Missing data

By default, the inaccuracy function fail to compute input data containing at least one missing data. Using the argument na.rm = TRUE will perform computation ignoring the missing value for this particular individual and variable (just like na.rm does within the mean() or sd() functions).

    # This will create new objects and insert NA in the first value of every y column

    enantiostylous.dat_NA <- enantiostylous.dat
    distylous.dat_NA <- distylous.dat
    styledimor.2antherwhorl.dat_NA <- styledimor.2antherwhorl.dat
    tristylous.dat_NA <- tristylous.dat

    enantiostylous.dat_NA[1,"y"] <- distylous.dat_NA[1,"y"] <- styledimor.2antherwhorl.dat_NA[1,"y"] <- tristylous.dat_NA[1,"y"]<- NA

    inaccuracy(enantiostylous.dat)
    #>                nL nS  Inac.u  Inac.d Inac.perc.u Inac.perc.d TotalInac
    #> enantiostylous 20 20 181.864 168.453      51.914      48.086   350.317
    #>                Mean2Stand.TotalInac     r      R
    #> enantiostylous                1.062 0.881 -2.009
    inaccuracy(distylous.dat)
    #>           nL nS Inac.u Inac.d Inac.perc.u Inac.perc.d TotalInac
    #> distylous 20 20 12.807 12.261      51.089      48.911    25.068
    #>           Mean2Stand.TotalInac     r      R
    #> distylous                0.597 0.609 -0.915
    inaccuracy(styledimor.2antherwhorl.dat)
    #>                nL nS Inac.u Inac.d Inac.perc.u Inac.perc.d TotalInac
    #> styledimorphic 20 20  7.565  5.617      57.387      42.613    13.182
    #>                Mean2Stand.TotalInac    r      R
    #> styledimorphic                0.395 0.49 -0.275
    inaccuracy(tristylous.dat)
    #>            nL nS nM Inac.u Inac.d Inac.b, Inac.perc.u Inac.perc.d Inac.perc.b
    #> tristylous 20 20 20 28.729 29.044   16.57      38.644      39.068      22.289
    #>            TotalInac Mean2Stand.TotalInac     r     R
    #> tristylous    74.343                1.091 0.382 0.207

    inaccuracy(enantiostylous.dat, na.rm=T)
    #> Warning in inaccuracy(enantiostylous.dat, na.rm = T): Warning: there are
    #> missing data for some sex organs and/or dimensions. The values retrieved may
    #> not be comparable accross populations.
    #>                nL nS  Inac.u  Inac.d Inac.perc.u Inac.perc.d TotalInac
    #> enantiostylous 20 20 181.864 168.453      51.914      48.086   350.317
    #>                Mean2Stand.TotalInac     r      R
    #> enantiostylous                1.062 0.881 -2.009
    inaccuracy(distylous.dat, na.rm=T)
    #> Warning in inaccuracy(distylous.dat, na.rm = T): Warning: there are missing
    #> data for some sex organs and/or dimensions. The values retrieved may not be
    #> comparable accross populations.
    #>           nL nS Inac.u Inac.d Inac.perc.u Inac.perc.d TotalInac
    #> distylous 20 20 12.807 12.261      51.089      48.911    25.068
    #>           Mean2Stand.TotalInac     r      R
    #> distylous                0.597 0.609 -0.915
    inaccuracy(styledimor.2antherwhorl.dat, na.rm=T)
    #> Warning in inaccuracy(styledimor.2antherwhorl.dat, na.rm = T): Warning: there
    #> are missing data for some sex organs and/or dimensions. The values retrieved
    #> may not be comparable accross populations.
    #>                nL nS Inac.u Inac.d Inac.perc.u Inac.perc.d TotalInac
    #> styledimorphic 20 20  7.565  5.617      57.387      42.613    13.182
    #>                Mean2Stand.TotalInac    r      R
    #> styledimorphic                0.395 0.49 -0.275
    inaccuracy(tristylous.dat, na.rm=T)
    #> Warning in inaccuracy(tristylous.dat, na.rm = T): Warning: there are missing
    #> data for some sex organs and/or dimensions. The values retrieved may not be
    #> comparable accross populations.
    #>            nL nS nM Inac.u Inac.d Inac.b, Inac.perc.u Inac.perc.d Inac.perc.b
    #> tristylous 20 20 20 28.729 29.044   16.57      38.644      39.068      22.289
    #>            TotalInac Mean2Stand.TotalInac     r     R
    #> tristylous    74.343                1.091 0.382 0.207

### Subsetting verticiles

In datasets with multiple verticiles it is possible to focus the analysis in a given subset. For example, the code below applies the function to a subset of anthers only (namely AN1 and AN3):(

    inaccuracy(enantiostylous.dat)
    #>                nL nS  Inac.u  Inac.d Inac.perc.u Inac.perc.d TotalInac
    #> enantiostylous 20 20 181.864 168.453      51.914      48.086   350.317
    #>                Mean2Stand.TotalInac     r      R
    #> enantiostylous                1.062 0.881 -2.009
    inaccuracy(enantiostylous.dat,useonly.vert=c("ST","AN1","AN3"))
    #>                nL nS  Inac.u  Inac.d Inac.perc.u Inac.perc.d TotalInac
    #> enantiostylous 20 20 186.002 165.019      52.989      47.011    351.02
    #>                Mean2Stand.TotalInac     r      R
    #> enantiostylous                1.056 0.878 -2.009

### Multi-populations inputs

All the input data used so far contains only one population, but the inaccuracy function can handle multiple populations and provide populational estimates. All the arguments detailed above behave the same regardless the number of populations:

    ## This code will generate a five-populations input data:

    SEEDS<-4321:4325
    exampleDataset<-c()
    for(i in 1:length(SEEDS))
    {
    set.seed(SEEDS[i])
    exampleDataset <- rbind(exampleDataset,SimDimor(NIDL = 10,NIDS = 10,
    Nst = 1, Nan = 1, LSTmeanX = 22, LSTsdX = 0.7, LANmeanX = 6, LANsdX = 0.2,
    SSTmeanX = 6, SSTsdX = 0.2, SANmeanX = 22, SANsdX = 0.7, LSTmeanY = 20,
    LSTsdY = 0.5, LANmeanY = 8, LANsdY = 0.5, SSTmeanY = 8, SSTsdY = 0.5,
    SANmeanY = 20, SANsdY = 0.5, LSTmeanZ = 18, LSTsdZ = 0.3, LANmeanZ = 9,
    LANsdZ = 0.3, SSTmeanZ = 9, SSTsdZ = 0.3, SANmeanZ = 18, SANsdZ = 0.3,
    pop_code=paste("pop",i,sep="")))
    }

    ## Basic analysis
    inaccuracy(exampleDataset)
    #>      nL nS  Inac.u  Inac.d Inac.perc.u Inac.perc.d TotalInac
    #> pop1 10 10 268.295 272.289      49.631      50.369   540.584
    #> pop2 10 10 277.557 270.366      50.656      49.344   547.923
    #> pop3 10 10 266.543 266.738      49.982      50.018   533.281
    #> pop4 10 10 257.173 264.184      49.328      50.672   521.357
    #> pop5 10 10 271.842 267.075      50.442      49.558   538.916
    #>      Mean2Stand.TotalInac     r      R
    #> pop1                0.919 0.666 -1.917
    #> pop2                0.949 0.679 -2.009
    #> pop3                0.920 0.675 -1.911
    #> pop4                0.900 0.665 -1.854
    #> pop5                0.931 0.672 -1.952
    ## Verbose
    inaccuracy(exampleDataset,verbose=TRUE)
    #> $Result
    #>      nL nS  Inac.u  Inac.d Inac.perc.u Inac.perc.d TotalInac
    #> pop1 10 10 268.295 272.289      49.631      50.369   540.584
    #> pop2 10 10 277.557 270.366      50.656      49.344   547.923
    #> pop3 10 10 266.543 266.738      49.982      50.018   533.281
    #> pop4 10 10 257.173 264.184      49.328      50.672   521.357
    #> pop5 10 10 271.842 267.075      50.442      49.558   538.916
    #>      Mean2Stand.TotalInac     r      R
    #> pop1                0.919 0.666 -1.917
    #> pop2                0.949 0.679 -2.009
    #> pop3                0.920 0.675 -1.911
    #> pop4                0.900 0.665 -1.854
    #> pop5                0.931 0.672 -1.952
    #>
    #> $Armbruster
    #>                             [,1]
    #> Mean.ST.u.x           14.2320135
    #> Mean.ST.u.y           13.8476192
    #> Mean.ST.u.z           13.5794139
    #> Mean.AN.u.x           13.9981382
    #> Mean.AN.u.y           13.8128908
    #> Mean.AN.u.z           13.5009576
    #> Mean.ST.d.x           13.7508114
    #> Mean.ST.d.y           14.0241268
    #> Mean.ST.d.z           13.4608860
    #> Mean.AN.d.x           14.1447570
    #> Mean.AN.d.y           13.8751140
    #> Mean.AN.d.z           13.4616444
    #> Mean.ALL.x            14.0314300
    #> Mean.ALL.y            13.8899377
    #> Mean.ALL.z            13.5007255
    #> Inac.u.xyz           271.8416294
    #> Inac.d.xyz           267.0745361
    #> Inac.perc.u           50.4422852
    #> Inac.perc.d           49.5577148
    #> TotalInac            538.9161655
    #> Mean2Stand.TotalInac   0.9306707
    #>
    #> $Sanchez
    #>         rL       sdrL         rS       sdrS          r        sdr          R
    #>  0.4772966  0.4412540  0.4736658  0.4367706  0.6724369  0.4390123 -1.9520806
    ## Subsetting dimensions
    inaccuracy(exampleDataset,useonly.dim = c("x","y"))
    #>      nL nS  Inac.u  Inac.d Inac.perc.u Inac.perc.d TotalInac
    #> pop1 10 10 225.101 228.362      49.640      50.360   453.463
    #> pop2 10 10 230.349 227.542      50.307      49.693   457.890
    #> pop3 10 10 220.659 222.715      49.768      50.232   443.375
    #> pop4 10 10 213.896 220.123      49.283      50.717   434.019
    #> pop5 10 10 225.580 222.881      50.301      49.699   448.461
    #>      Mean2Stand.TotalInac     r      R
    #> pop1                1.130 0.736 -2.589
    #> pop2                1.170 0.752 -2.714
    #> pop3                1.122 0.744 -2.554
    #> pop4                1.106 0.735 -2.508
    #> pop5                1.143 0.745 -2.626