versionlog: Log of bipartite versions and changes

Description Usage versionlog Note Author(s)


Log tracking changes, bug fixes and new functions in bipartite




  • 1.18 (release date: 06-Sep-2012)

    New function and index fd:

    fd computes the functional diversity for the rows of a web as a measure of ecological niche complementarity (Devoto et al. 2012). Function written and provided by Mariano Devoto. fd is also included in the computation of networklevel.

    New function czvalues

    to compute c- and z-values of the higher trophic level for modular networks. Requires a successful identification of modules through computeModules. These can then be used to identify connector species in a network.

    Speed-up of plotweb:

    Thanks to Dirk Raetzel, whose smart improvement made this function orders of magnitude faster! (Amazing how a total of 7 lines of code in a total of over 300 for this function can make such a vast improvement!)

    Speed-up of compart:

    Thanks to Juan M. Barreneche, whose smart improvement made this function orders of magnitude faster while using dramatically less memory.

    New option for simulating extinctions in second.extinct (and necessarily extinction):

    Use method="external" to impose a specific sequence of exterminations onto the function. Provide this sequence as an index vector (e.g. c(4,2,3,1)) through the argument ext.row or ext.col (for lower and higher species level, respectively). Requested/proposed by Matt Koski. (Implementation is far from elegant and will be cleaned up in a future version.)

    Modification of visweb:

    The user is now able to use user-defined colours (def.col) for interaction ranks (square="d"). Thereby the number of interactions can define the colour of the cell in the plot. Makes visweb-plot prettier.

    Important bug fix in robustness and second.extinct:

    robustness sometimes interpreted wrongly which trophic level was subject to simulated extinction. That was easy to fix. En route, however, I also discovered unexpected behaviour in the second.extinct function: it gobbled up the last species to be removed from the web. I do not think that extinction slope estimates are affected much, but robustness results may well be exhibiting a bias towards 0.5! Thanks to Silvia Santamaria for reporting this!

    Little bug fix in functions BC and CC:

    Functions always used unweighted networks for computing betweenness and closeness. The default is now to use weighted information, an option which can be switched off. Thanks to Michael Pocock for reporting and suggesting a fix! (Notice the help file for these functions and the large effect that the choice of settings can have on the results!)

    Little bug fix in function computeModules:

    Failed to work for networks with empty columns or rows. These will now be deleted (with a warning) before the analysis. Thanks to Julien Renoult for reporting.

    Little bug fix in function plotweb:

    Failed to work for networks with only one column or row. Thanks to Zhijiang Wang for reporting.

    Minor bug fix in networklevel:

    Caused an error if a selection of indices was provided.

    Corrections in the help of networklevel:

    Web asymmetry was explained the wrong way around (thanks to Bernhard Hoiß for reporting!) and there was some confusion in the help for whether quantitative or weighted-quantitative indices were implemented (Yvonne Fabian for correcting the clarification!).

  • 1.17 (release date: 20-AUG-2011)

    New specialisation index at the species level in function PDI:

    Computes the Paired Differences Index proposed by Poisot et al. (2011a,b). Also automatically now included in specieslevel.

    Bug fix in specieslevel:

    Computation of betweenness was causing an error when the network was containing a single-link compartment. Thanks to Marco Mello for spotting!

    Another PDF is included (Dormann 2011):

    This paper compares specialisation indices, based on the function specieslevel. All source code to reproduce these results is included. It can serve as a guide to the specieslevel function and its interpretation.

  • 1.16 (release date: 29-May-2011)

    Bug fix and extended documentation in dfun:

    1. Sometimes d.min was larger than d.raw yielding negative d'-values. Since the search for d.min is heuristic, it can sometimes fail to yield lower values than d.raw. In these (rare) cases, d.min is now set to d.raw. 2. Documentation for a specific (but not uncommon or unreasonable) constellation added: When independent abundances were provided, the empty rows/columns are purposefully not removed from the web (because they now still contain information). Logically (and as implemented), this leads to d-values for these species of NA. This makes sense: the pollinator, say, has never been observed on any of the flowers, so how can we quantify its specialisation? While reasonable, it was undocumented behaviour. Thanks to Ana María Martín Gonzáles for drawing our attention to it!

    Speed improvement in shuffle.web:

    Thanks to Paul Rabie, a faster implementation of the shuffle.web null model is available. Choosing the option legacy=FALSE will deliver the null models about 3 times faster.

  • 1.15 (release date: 05-Mar-2011)

    Bug fix in swap.web:

    Occasionally, an interaction too many was swapped, leading to a connectance slightly too low compared to the original matrix. Spotted and reported by Sven Hanoteaux. (For “normal” webs, this bug has luckily caused only very small discrepancies between the realised and the intended null web. We thus regard this error to be (luckily) of virtually no influence on the results reported in our Open Ecology Journal paper. Please also note that the help of swap.web recommends using vaznull.)

    Bug fix in shuffle.web:

    Some interactions were lost when there were more rows than columns. Spotted and reported by Sven Hanoteaux. (Please note that while a shameful mistake, it luckily does not affect the results reported in our Open Ecology Journal paper, where all webs analysed were asymmetric “in the right way”.)

    Minor bug fix in networklevel:

    No output was provided when only index “Fisher alpha” or “mean interaction diversity” was selected. Thanks to Sven Hanoteaux for reporting and fixing!

  • 1.14 (release date: 21-Dez-2010)

    New function plotPAC:

    A plotting function to go with the PAC-function, providing a nice circularly arranged bubble plot, which has been copied (in style) from Morris et al. (2005). Various colour options are available.

    New index “weighted NODF” included in networklevel and nested:

    Gustavo Carvallo has updated the existing function nestednodf in vegan to compute a weighted (quantitative) version as proposed by Ulrich & Almeida Neto (2011 Env. Mod. Soft). This is now linked into bipartite.

    New data set:

    bezerra2009 is a“full” flower-visitation network of oil-collecting bees in Brazil. See help for details.

    Minor bug fix in specieslevel:

    The newly (1.13) added functionality for index “weighted closeness” did not work for webs without column and row names (such as null models). Also “weighted betweenness” was occasionally playing up.

    Minor bug fix in specieslevel:

    Betweenness and friends cannot be computed for fully compartmented webs (i.e. where each species interacts only with its own partner in the other trophic level). The function then failed instead of returning NA. Thanks to Nadine Sandau for reporting.

    Minor bug fix in dfun:

    When providing independent abundances, the computation of dmin was sometimes incorrect (particularly for small webs) due to a typo. Fixed by Jochen Fründ.

    Minor time-saving improvement in degreedistr:

    When provided with 3 or less point to compute the degree-distribution fit from now immediately returns NA-filled matrices. Saves the time of going through all starting values and still failing.

    Change of name of function argument in web2edges:

    The former quantitative did not really reflect what it does, so it was changed to weight.column.

    Minor improvements to networklevel:

    Robustness and weighted nestedness were wrapped in try-functions (for very small networks).

    New functionality to find modules in networks.

    This is still experimental and proper references etc. will be added after testing! Please do not use for production yet (at least not without consultation). Thanks to Rouven Strauß for developing this.

  • 1.13 (release date: 29-Sep-2010)

    Option added to H2fun

    to compute H2' for non-integer web. Thanks to Jochen Fründ for providing the inspiration and the code. This option is also now available in networklevel.

    Changes to nullmodel:

    Upon using the modification entered in version 1.12, it turns out this is no improvement but rather a step in the wrong direction. So this function is back to its pre-1.12 working with a little bug fixed in swap.web (the helper function ‘upswap’ got an option too many) that caused the alteration in the 1.12 version. Thanks to Jochen Fründ for insisting on rolling this back.

    Bug fix in networklevel:

    Alatalo interaction evenness could not be called separately due to a change of name within the function. Thanks to Rachel Gibson for reporting!

    New index added to networklevel:

    In addition to the binary cluster coefficient, the function now also (and automatically) computes the weighted clustering coefficient introduced by Tore Opsahl in his package tnet.

    New function web2edges:

    Transforms a web-matrix into an edge list, as used in tnet or other software (e.g. Pajek).

  • 1.12 (release date: 21-May-2010)

    Bug fix in vaznull:

    In very poorly sampled networks, vaznull could fail because after the initial filling there were no more interactions to distribute. How an if-statement can sometimes make a difference.

    Error message in nullmodel changed to a warning.

    Up to this release, the function created null models as specified. However, when a supposedly quantitative network was in fact binary, it returned an error. Now it proceeds, using the null model generating algorithm “mgen”, and returns a warning.

  • 1.11 (release date: 10-May-2010)

    Changes to function

    Gains options to do projections of the bipartite (=two-mode) into the one-mode modus required e.g. by sna. In most publications, one focusses on only one trophic level (e.g. the pollinators) and represents the bipartite network as a one-mode, pollinators-only network. This can now be achieved using the various options in the function. See its help for details.

    Bug fixes in BC and CC:

    Upon re-reading the paper motivating the inclusion of these functions, I noticed an error in the previous implementation. The key point, and one that is contentious in network theory, is that there is no standard best way to project a two-mode (bipartite) network onto a one-mode network. Up until know, I used the default of However, Martín Gonzáles et al. (2010) use the more common projection (“higher” and “lower”, respectively), and this is also now implemented in BC and CC. The interested reader may want to follow this problem up by reading the pre-print of Tore Opsahl (“Triadic closure in two-mode networks”) to see that this one-mode projection actually distorts the statistics employed on them.

  • 1.10 (release date: 02-May-2010)

    New function null.distr:

    Fits a lognormal or negative binomial distribution to the marginal totals of a network and then draws random values from the thus specified distribution. These values represent the marginal totals to be used for constructing a null model network. The function thus serves as a way to produce null models without maintaining exactly the marginal totals, but only their distribution. Please refer to the help for some cautionary remarks on its use! In particular, null model networks are likely to be smaller than the original and there is obviously no guarantee that the marginal totals are actually distributed in the specified way!

    Polishing the Vázquez pollination networks:

    All species in these 8 networks are now consistently named (rather than numbered).

    Polish to specieslevel:

    Requesting Fisher's alpha sometimes causes convergence problems in the underlying function. This is now caught by a try, returning NA.

    Rescale in nested gave wrong scaling for NODF:


  • 1.09 (release date: 22-Mar-2010)

    Bug fix in degreedistr:

    Degree distributions for the higher trophic level were calculated incorrectly. The main problem was that the scaling constant was omitted, leading to ridiculous fits. (Thanks to Roberto Molowny for reporting, correction proposal and discussion!) On improving this, I also ventured to provide multiple starting values and hence the function returns a fit for all three curves more often (but not always).

  • 1.08 (release date: 16-Mar-2010)

    Bug fix in ND:

    Rows and columns were mixed up and a +1 was missing- oh dear. (Thanks to Marco Mello for reporting!)

  • 1.07 (release date: 18-Feb-2010)

    New function vaznull:

    Null model with constrained totals and connectance proposed by Diego Vázquez, similar to swap.web, but “better”. See notes in swap.web-help for justification of this statement. We recommend this null model for constraining both marginal totals and connectance.

    Added a new option to calculate extinction slopes:

    So far, random extinction sequences and the rarest-to-commenest sequence were implemented. Now, second.extinct also includes the option method="degree" to build a sequence from the best-to-least connected species. This is the most extreme case, where the most generalist species goes extinct first (see Memmott et al. 1998). (In response to request by Simone Bazarian.)

    Adaptations of nullmodel:

    Now includes the new vaznull as a method (3). This leads to changes in the sequence of methods! Old code may hence have to be adapted accordingly!

  • 1.06 (release date: 18-Dec-2009)

    New functions ND, BC and CC:

    Simple functions to calculate normalised degree, betweenness centrality and closeness centrality. These functions and the example allows a reproduction of the type of analysis carried out in Martín González et al. (2009).

    Changes to specieslevel

    , which now calls ND, BC and CC, too.

    Bug fix in

    now allows also data.frames to be turned into one-mode-style representations. Previously, only matrices could be used.

    Suppression of errors and warnings in networklevel:

    When used on a full network (i.e. one without zeros), some indices in networklevel are undefined (e.g. extinction slopes). This led to a long output of warning and error messages, although internally I used the try-function to capture errors. Now, these messages are suppressed.

  • 1.05 (release date: 05-Dec-2009)

    Help description for PAC was convoluted

    and its suggestions for the interpretation downright wrong. Thanks to Matthew Wainhouse for reporting and simplifying it!

    Resolved a long-standing issue of a warning message.

    This occurred when detaching the package (detach(package:bipartite)) and was caused by somehow wrongly using .Last.lib. Deleting it solved the problem.

    Fixed bug in specieslevel:

    Calling this function with only one index caused it to return empty lists. Simple mistake, but better without it.

  • 1.03 (release date: 06-Nov-2009)

    Bug fix in V.ratio:

    A small mistake for a human, but a huge bug for mankind. Sorry. (Detail: I forgot to square sigma.i, leading to strange results.) Thanks to Giorgio Mancinelli for reporting!

    Error message for non-existent indices in networklevel:

    So far, networklevel returned NULL when an index was selected that does not exist (e.g. "shannon diversity" instead of "diversity"). Now, a helpful (?) error message is returned.

    Change in defaults to index "interaction evenness" in networklevel:

    After a fruitful discussion with Becky Morris and Jason Tylianakis, I changed the default to "sum". I also reproduce some of our communication in the help to this function, under details, to make the ecological assumptions behind either option a bit more transparent. There are good reasons for either option.

  • 1.02 (release date: 11-Sep-2009)

    Function plotweb:

    Now more trophic networks can be plotted by staggering bipartite networks on top of each other. See multitrophic examples in plotweb.

    Minor corrections to dfun:

    This function did not return exactly the values of the website-version. Jochen Fründ corrected this. Please read the help of the function (final paragraph) for details.

    New function nested:

    This convenience function collects the various ways to calculate nestedness of a network in order to facilitate comparison of nestedness analyses. To do so, it heavily borrows from vegan.

    Bug fix to discrepancy:

    Would return a silly value (half of the number of rows) for empty matrices. This had no effect when called by networklevel, since the matrix would have been emptied. Thanks to Roberto Molowny for reporting!

    Bug fix to networklevel:

    Due to a missing space, the option ALLBUTDD did not work properly. Thanks to Etienne Laliberte for reporting!

  • 1.00 (release date: 06-Aug-2009)

    Complete overhaul of networklevel:

    After a workshop on bipartite networks in ecology, a few more indices were added (Fisher's alpha diversity of interactions, mean interaction diversity, mean number of predators) and the whole output reorganised. It now follows a gradient from less to more interesting (in our view) indices, and from indices for binary to those for quantitative networks. Also, I added several options for which indices to report (index="info", "binary", "quantitative", "topology"). Most interestingly, perhaps, there is now a quantitative, Shannon-based series of indices. Starting with the “mean interaction diversity” (i.e. the Shannon-diversity of interactions of a species, averaged across all species in that trophic level), over “Shannon diversity” of interactions, to H2 (i.e. Shannon diversity scaled between max and min possible for this web characteristics).

    Additions to, and overhaul of specieslevel:

    Similar to the above item, some indices were added, and the output simplified when calling the option index="ALLBUTD" (only one D here!): a list with two matrices is now returned. Fisher's alpha for each species, vulnerability/generality and effective number of species for each target species are also now included. Index sequence has changed.

    New function PAC:

    Calculates the Potential for Apparent Competition following the formula in Müller et al. (1999) and Morris et al. (2005) and the suggestion by Becky Morris and Owen Lewis. More than a theoretical concept, it was experimentally shown to be relevant (Morris et al. 2004).

    Bug fix in H2fun and dfun:

    A line of code went missing at some point, so the maximum packing density was not optimal (but still good) in these functions. As a result, reported H2- and d-values were sometimes 0 when they should be only very close to 0.

    Switch for error reporting in degreedistr:

    By default now suppresses error reporting when nls fails to fit a degree distribution due to too few data points. This leaves the user of networklevel somewhat less confused. Warning message now also indicates for which trophic level there were too few data points.

    Bug fix in C.score:

    Failed when the web was very dense or very sparse, because the maximum number of checkerboard patterns was 0 then.

  • 0.94 (release date: 01-Aug-2009)

    New function nullmodel:

    A convenience wrapper function to generate different types of null models.

    Small changes to networklevel:

    This function returns a list of indices. If we exclude the computation of degree distribution fits, this would be coerced to a vector. We added the option index="ALLBUTDD" to calculate all indices BUT degree distributions. The output is then returned as vector. This is much more convenient when using networklevel on many data sets (using sapply).

  • 0.93 (release date: 30-Jun-2009)

    bug fix in slope.bipartite and robustness:

    The function always selected column 3 of the object, instead of 2 for lower and 3 for higher trophic level; thanks to Antonio Rivera for spotting and reporting this error! Notice that this error must have slipped in somewhere around version 0.90/0.91, because I checked and the results reported in the Open Ecology Journal paper are valid! I seem to remember that I (CFD) modified slope.bipartite when robustness was added: never change a wining team!

  • 0.92 (release date: 02-Jun-2009)

    more colour options in visweb:

    the arguments box.border and box.col now allow a specification of the colour of the boxes and their borders.

    bug fix empty:

    the function returned 0 for a 1x1 matrix. Although not written for such a case, it should still do what it says on the tin. Thanks to Mariano Devoto for spotting and reporting!

    bug fix wine:

    returned NA for square matrices.

    bug fix

    gave decimal places for row and column names for very small networks.

  • 0.91 (release date: 06-May-2009)

    new function wine:

    This function replaces the (now deprecated) function nestedness.corso in calculating a (weighted) nestedness for bipartite networks. It was developed and implemented by Marcelino de la Cruz, Juan M. Pastor, Javier Galeano and Jose Iriondo. It is also called by networklevel. A plotting function is also available, depicting the contributions of each observed link to the web's nestedness. - nestedness.corso is now removed from the package. The main reason is that it served as an interim solution for wine, and the Corso-way of calculating nestedness is just one more of already too many. If you intend to use wine on binary data and interpret that as a Corso-equivalent, beware of the following two main differences (thanks to Jose Iriondo for summarising them): First, the nestedness of Corso et al. varies between 0 and 1, with the highest nestedness is reached at 0 and 1 corresponds to random, whereas in wine is just the opposite (this is because the Manhattan distances are calculated with regard to opposite sides of the matrix). Secondly, the ‘d’ in the nestedness of Corso is the sums of the ‘dij’s whereas in wine, the ‘d’ (= ‘win’ value of the object produced by wine) is the average of the ‘dij’s above 0. So, we recommend NOT to use wine for calculating Corso's nestedness, but rather download the source code for nestedness.corso from an older version of bipartite.

    new function robustness:

    A better way to quantify the effect of species loss on the extinctions in the other trophic level; kindly provided by Mariano Devoto. This index is also part of networklevel.

    new data set ollerton2003:

    Another quantitative pollination network from the NCEAS database (see ollerton2003).

  • 0.90 (release date: 24-Mar-2009)

    example vazquez.example:

    We added several new functionalities mainly to be able to analysis data and use network statistics as suggested by Vázquez et al. 2009. You can access this example by typing ?vazquez.example.

    new feature in visweb:

    Can now plot different sized circles to represent interactions, as proposed by Vázquez et al. (2009).

    new feature in networklevel:

    We added an option to calculate interaction evenness either based on all possible links or just on realized links.

    new function sortweb:

    Can be used to sort webs in different ways.

    data set inouye1988:

    Another pollination network from the NCEAS database (see inouye1988).

    Function compart:

    We replaced the CA-based approach to detecting compartments by a comprehensive and recursive approach. The latter is not affected by ties in the data set (i.e. species with the same number of links). In quantitative webs and for the networks included in bipartite, the old function was working fine, but in more recent trials it failed to detect 2-species compartments. In turn, we had to adapt networklevel and plotweb.

  • 0.85 (release date: 10-Mar-2009)

    Function plotweb

    New feature: text labels can now be printed in different colours. All colours can be passed as vectors and vectors are recycled if not of appropriate length

  • 0.84 (release date: 25-Feb-2009)

    Function plotweb

    New feature: arrow=“center.up”, arrow=“center.down”, arrow=“center.both”: this results in the standard presentation of bipartite networks, where interactions are displayed as centered triangles.

  • 0.83 (release date: 9-Feb-2009) pdf of OEJ-paper added as vignette

  • 0.82 (release date: 27-Jan-2009)

    Function plotweb

    Two new features: 1. colors of borders of boxes and interactions can be specified via setting bor.col. 2. Labels can now be rotated by specifying text.rot=90.

  • 0.81 (release date: 06-Jan-2009)

    Function nodespec replaces the now obsolete function functspec.

    The inventor of functional specialisation, Bo Dalsgaard, understands the term ‘functional specialisation’ to be restricted to the way in which plants are specialised to pollinators. Although I disagree (and think that ‘functional’ actually means very little until defined for a given problem), I renamed the ‘functional specialisation index’ into ‘node specialisation index’. This is not a particularly clever name, but at least it indicates that the position of nodes in a network is important when it is calculated.

    Bug in networklevel:

    Call to nestedness.corso overwrote results of nestedness.

    Various changes related to the analysis of very small webs.

    Very small webs should probably not be used at all for testing theories! Indices are usually VERY sensitive to the exact number of species, number of observations etc. Still, sometimes we simply want to calculate some index, and then bipartite should handle such small networks, too. So, when going through several dozens of very small webs (sometimes only containing one species in one of the two trophic levels), several functions did not perform correctly (usually to such minor programming issues such as matrices being converted to vectors when [ was used with drop=TRUE, i.e. the default). Changes affected the functions discrepancy, nestedness.corso, shuffle.web, compart and empty. Their output remains identical, only they now also work for small webs.

    Changes to nestedness.corso with weighted=TRUE

    Galeano et al. do not describe how to deal with ties, nor do they make clear if the packed matrix should be sorted by marginal sum of links or marginal sum of interactions! Previously, we used marginal sum of interactions (because it is a weighted index), but now we moved to marginal sum of links, because that is how I interpret their paper after a third (or forth) re-reading. Furthermore, because the real maximum chaos cannot be derived (to my knowledge) algorithmically, we use the 95% quantile of 500 randomisations as maximum. This will lead to a consistently overestimated nestedness, but it is less sensitive to the number of replicates than the max. (Also, there was an error in the description of the value returned: 0 is nested, 1 is chaos!)

  • 0.8 (release date: 21-Dec-2008)

    bug fix in shuffle.web

    Function didn't work correctly when the web contained more rows than columns. (Thanks to Anna Traveset for spotting and reporting!)

    minor modifications in networklevel

    Sometimes additional information is available and species can be included in a network, although they have no interactions with other species. In this case, one might want to use these species in the network, too. A new option (empty.web), allows to keep empty rows and columns, although for some functions an emptied web must be used (e.g. degree distributions).

    bug fix in H2fun

    As in the last H2fun bug fix, sometimes H2 became negative.

    bug (?) fix in networklevel

    Shannon diversity is based on the log of interactions. If this value is 0, as it is for most network entries, an NA is produced. As a consequence, Shannon's H (now also given in output) is based not on all interactions, but only those > 0. In consequence, Shannon evenness should also only be SH divided by the number of realised interactions (log(sum(web>0))). That is now the case.

  • 0.74 (release date: 24-Oct-2008)

    functional specialisation (functspec) bug fix

    Paths were double the true length, hence minimum was 2, rather than 1.

    H2fun bug fix

    Since the search for H2min is heuristic, H2uncorr can sometimes be lower than H2min; in that case, H2fun returned a value greater 1, while it should be one exactly.

    new function nestedness.corso

    Calculates (weighted) nestedness according to Corso et al. (2008) and Galeano et al. (2008).

    new function discrepancy

    Calculates discrepancy according to Brualdi & Sanderson (1999), deemed to be best ever measure of nestedness; also gives an example for a binary null model analysis based on vegan's commsimulator.


    Correction of several minor typos on the help pages; removal of "~" in help files; same citation style throughout; new cross references (especially for the nestedness functions); in networklevel, nestedness is now calculated using vegan's nestedtemp due to matrix inversion problems reported for binmatnest.

  • 0.73 (release date: 1-Sept-2008)

    new feature


    Named abundance-vector for each level can be used.

    new function plotweb2 (not debugged!)

    For plotting tripartite networks.

  • 0.72 (release date: 12-June-2008)

    new function: functional specialisation with functspec

    See Dalgaard et al. (2008).

    new function: interface to sna through

    Allows calculation of path lengths, centrality, betweenness and other indices developed for one-mode networks.


    Error in plotweb when no species labels were given.


This function is only invoked for its side effect of opening the help page. I simply didn't know how to do it any other way ...


Carsten F. Dormann <>

Search within the bipartite package
Search all R packages, documentation and source code

Questions? Problems? Suggestions? or email at

Please suggest features or report bugs with the GitHub issue tracker.

All documentation is copyright its authors; we didn't write any of that.