Since version 0.3, **cranly** includes functions for extracting information from `cranly_network`

objects (see `?extractor-functions`

). All extractor functions in `cranly`

try to figure out what `y`

is in the statements

`y`

is [the] `extractor-function`

a `package`

/`author`

Let's attach **cranly**

library("cranly")

and use instances of the package directives and author collaboration networks

package_network <- readRDS(url("https://raw.githubusercontent.com/ikosmidis/cranly/develop/inst/extdata/package_network.rds")) author_network <- readRDS(url("https://raw.githubusercontent.com/ikosmidis/cranly/develop/inst/extdata/author_network.rds"))

from CRAN's state on 2022-08-26 14:43:43 BST

Alternatively, today's package directives and author collaboration networks can be constructed by doing

cran_db <- clean_CRAN_db() package_network <- build_network(cran_db) author_network <- build_network(cran_db, perspective = "author")

package_network |> package_by("Kurt Hornik", exact = TRUE) #> [1] "arules" "bibtex" "bindata" #> [4] "cclust" "chron" "clue" #> [7] "cluster" "coin" "colorspace" #> [10] "cordillera" "ctv" "date" #> [13] "dendextend" "digest" "e1071" #> [16] "exactRankTests" "fortunes" "gap" #> [19] "gsignal" "ISOcodes" "isotone" #> [22] "kernlab" "lpSolveAPI" "MASS" #> [25] "mda" "mistr" "movMF" #> [28] "mvord" "nloptr" "NLP" #> [31] "NLPclient" "NLPutils" "OAIHarvester" #> [34] "openNLP" "openNLPdata" "opGMMassessment" #> [37] "oz" "pandocfilters" "party" #> [40] "polyclip" "polynom" "PolynomF" #> [43] "princurve" "qrmdata" "qrmtools" #> [46] "Rcplex" "relations" "Rglpk" #> [49] "RKEA" "RKEAjars" "ROI" #> [52] "ROI.plugin.msbinlp" "Rpoppler" "Rsymphony" #> [55] "RWeka" "RWekajars" "seriation" #> [58] "sets" "signal" "skmeans" #> [61] "slam" "stablelearner" "strucchange" #> [64] "strucchangeRcpp" "tau" "textcat" #> [67] "textplot" "tm" "tm.plugin.mail" #> [70] "topicmodels" "tseries" "TSP" #> [73] "Unicode" "vcd" "W3CMarkupValidator" #> [76] "WeightSVM" "wordnet"

package_network |> package_by("Ioannis") #> [1] "BCT" "betareg" "brglm" "brglm2" #> [5] "camtrapR" "detectseparation" "enrichwith" "FLR" #> [9] "IPMbook" "MXM" "PlackettLuce" "profileModel" #> [13] "Rfast" "trackeR" "trackeRapp" "USP"

author_network |> package_with("glm") #> [1] "glmlep" "glmnet" "biglm" "biglmm" #> [5] "dbglm" "glm2" "glmertree" "glmx" #> [9] "cglm" "glmmTMB" "aglm" "StroupGLMM" #> [13] "fastglm" "r2glmm" "bestglm" "eventglm" #> [17] "GLMaSPU" "glmbb" "glmm" "AutoStepwiseGLM" #> [21] "glmnetUtils" "glmvsd" "GLMpack" "poisson.glm.mix" #> [25] "glmmfields" "HBglm" "brglm" "brglm2" #> [29] "GLMMRR" "plsRglm" "GLMMadaptive" "BranchGLM" #> [33] "glm.predict" "mbrglm" "CPMCGLM" "hdpGLM" #> [37] "glmdisc" "CIS.DGLM" "SplitGLM" "icdGLM" #> [41] "misclassGLM" "pglm" "hglm" "hglm.data" #> [45] "RPEGLMEN" "glmpath" "GlmSimulatoR" "glmc" #> [49] "randomGLM" "glmmEP" "dglm" "GLMsData" #> [53] "DGLMExtPois" "dhglm" "mdhglm" "ezglm" #> [57] "parglm" "glmmSeq" "holiglm" "glmmML" #> [61] "MGLM" "FGLMtrunc" "gglm" "speedglm" #> [65] "glmm.hp" "glm.deploy" "glmtlp" "GLMcat" #> [69] "glmtree" "glme" "glmglrt" "glmmLasso" #> [73] "glmmPen" "glmnetcr" "glmpathcr" "glmnetSE" #> [77] "glmpca" "glmtoolbox" "glmtrans" "glmulti" #> [81] "glmxdiag" "HDGLM" "simglm" "htmcglm" #> [85] "mcglm" "ICglm" "mglmn" "lsplsGlm" #> [89] "MCMCglmm" "mcemGLM" "robmixglm" "mvglmmRank" #> [93] "oglmx" "prettyglm" "QGglmm" "stepjglm"

`lubridate`

packagepackage_network |> author_of("lubridate", exact = TRUE) #> [1] "Vitalie Spinu" "Garrett Grolemund" "Hadley Wickham" #> [4] "Davis Vaughan" "Ian Lyttle" "Imanuel Costigan" #> [7] "Jason Law" "Doug Mitarotonda" "Joseph Larmarange" #> [10] "Jonathan Boiser" "Chel Hee Lee" "Google Inc"

package_network |> author_with("Ioan") #> [1] "Ioan Gabriel Bucur" "Ioannis Papageorgiou" "Ioannis Kontoyiannis" #> [4] "Ioannis Kosmidis" "Ioanna Manolopoulou" "Ioannis Alexiou" #> [7] "Ioannis N Athanasiadis" "Ioannis Ntzoufras" "Ioannis Tsamardinos" #> [10] "Alex Ioannides" "Eleni Ioanna Delatola" "Ioana-Elena Oana" #> [13] "Lazaros Ioannidis"

`sf`

packagepackage_network |> suggested_by("sf", exact = TRUE) #> [1] "blob" "covr" "dplyr" "ggplot2" #> [5] "knitr" "lwgeom" "maps" "mapview" #> [9] "Matrix" "microbenchmark" "odbc" "pbapply" #> [13] "pillar" "pool" "raster" "rlang" #> [17] "rmarkdown" "RPostgres" "RPostgreSQL" "RSQLite" #> [21] "sp" "spatstat" "spatstat.geom" "spatstat.random" #> [25] "spatstat.linnet" "spatstat.utils" "stars" "terra" #> [29] "testthat" "tibble" "tidyr" "tidyselect" #> [33] "tmap" "vctrs" "wk" package_network |> imported_by("sf", exact = TRUE) #> [1] "classInt" "DBI" "graphics" "grDevices" "grid" "magrittr" #> [7] "Rcpp" "s2" "stats" "tools" "units" "utils" package_network |> enhanced_by("sf", exact = TRUE) #> character(0)

`sf`

packagepackage_network |> suggesting("sf", exact = TRUE) #> [1] "accessibility" "adklakedata" "AMAPVox" #> [4] "apsimx" "argoFloats" "auk" #> [7] "BiodiversityR" "BIOMASS" "biscale" #> [10] "bmstdr" "BSBT" "cancensus" #> [13] "CAST" "censusxy" "ckanr" #> [16] "climaemet" "climatrends" "cmhc" #> [19] "colorist" "ctmm" "dataRetrieval" #> [22] "deckgl" "DeclareDesign" "disdat" #> [25] "dodgr" "echelon" "echor" #> [28] "EcoIndR" "efdm" "ENMeval" #> [31] "eRTG3D" "eurostat" "fasterize" #> [34] "febr" "FlickrAPI" "gdalcubes" #> [37] "gear" "geocmeans" "geodaData" #> [40] "geohashTools" "geojson" "geometa" #> [43] "geomtextpath" "geos" "gfcanalysis" #> [46] "ggblanket" "ggformula" "gghighlight" #> [49] "gginnards" "ggiraph" "ggpattern" #> [52] "ggplot2" "ggrastr" "googlePolylines" #> [55] "graphhopper" "graticule" "grwat" #> [58] "gstat" "gtfsrouter" "ipumsr" #> [61] "isoband" "janitor" "jsonlite" #> [64] "kdtools" "leaflet" "leaflet.extras2" #> [67] "leri" "lutz" "mapsFinland" #> [70] "mdsr" "metamer" "mlr" #> [73] "mlr3spatiotempcv" "mudata2" "nlaR" #> [76] "o2geosocial" "oce" "od" #> [79] "onemapsgapi" "opencage" "osmdata" #> [82] "palmid" "pinochet" "plainview" #> [85] "plotly" "plumber" "PointedSDMs" #> [88] "polyCub" "polylabelr" "protolite" #> [91] "raster" "rasterVis" "rayrender" #> [94] "rayshader" "rcartocolor" "rdhs" #> [97] "readwritesqlite" "recogito" "regional" #> [100] "regweight" "reproducible" "rgbif" #> [103] "rgee" "RGENERATEPREC" "rGhanaCensus" #> [106] "rgrass" "rgrass7" "rinat" #> [109] "rmangal" "RtD3" "sbtools" #> [112] "sdcSpatial" "sdmApp" "sociome" #> [115] "soilDB" "sp" "spacetime" #> [118] "SpaceTimeBSS" "SpaDES.tools" "SpatialBSS" #> [121] "spbabel" "spData" "spflow" #> [124] "spotoroo" "spsur" "swmmr" #> [127] "terra" "tgver" "tricolore" #> [130] "ukpolice" "unifir" "ursa" #> [133] "USAboundaries" "waterquality" "wk" package_network |> importing("sf", exact = TRUE) #> [1] "abmR" "abstr" "adw" #> [4] "amt" "aopdata" "areal" #> [7] "ARPALData" "ascotraceR" "aurin" #> [10] "BARIS" "basemaps" "bayesmove" #> [13] "bbsBayes" "bcdata" "bcputility" #> [16] "bdc" "bdl" "BIEN" #> [19] "bigDM" "blockCV" "bluebike" #> [22] "bnspatial" "briskaR" "btb" #> [25] "buffeRs" "camtrapR" "capm" #> [28] "CARBayes" "CARBayesdata" "CARBayesST" #> [31] "card" "cartograflow" "cartogram" #> [34] "cartogramR" "cartography" "CatastRo" #> [37] "cdcfluview" "cdrcR" "censable" #> [40] "chirps" "clhs" "ClimMobTools" #> [43] "comorosmaps" "concaveman" "conleyreg" #> [46] "ConR" "CopernicusDEM" "covid19br" #> [49] "covid19sf" "covidcast" "crawl" #> [52] "crimedata" "CropScapeR" "crsuggest" #> [55] "cshapes" "cubble" "cyclestreets" #> [58] "datazoom.amazonia" "daymetr" "Directional" #> [61] "distanceto" "divseg" "dots" #> [64] "dsims" "dssd" "dwp" #> [67] "ebirdst" "edbuildmapr" "eks" #> [70] "elevatr" "EmissV" "envirem" #> [73] "epiR" "epm" "eSDM" #> [76] "exactextractr" "extRatum" "FedData" #> [79] "fgdr" "FIESTA" "FIESTAutils" #> [82] "fisheye" "fitbitViz" "flexpolyline" #> [85] "flightplot" "foieGras" "forestecology" #> [88] "FORTLS" "fsr" "galah" #> [91] "GapAnalysis" "gbm.auto" "gdalUtilities" #> [94] "GeNetIt" "geobr" "geodimension" #> [97] "geodiv" "geodrawr" "geofacet" #> [100] "geofi" "geogrid" "geojsonio" #> [103] "geoknife" "geomander" "geomaroc" #> [106] "geometr" "geonetwork" "geostan" #> [109] "geouy" "geoviz" "ggOceanMaps" #> [112] "ggseg" "ggsn" "ggspatial" #> [115] "ggVennDiagram" "giscoR" "glottospace" #> [118] "grainchanger" "graph4lg" "GREENeR" #> [121] "gridpattern" "gtfs2gps" "gtfstools" #> [124] "gwavr" "GWnnegPCA" "GWpcor" #> [127] "gwpcormapper" "GWSDAT" "h3jsr" #> [130] "happign" "HDSpatialScan" "helsinki" #> [133] "hereR" "himach" "hwsdr" #> [136] "hypsoLoop" "IceSat2R" "idbr" #> [139] "imcRtools" "IRexamples" "itsdm" #> [142] "japanmesh" "jpgrid" "jpmesh" #> [145] "klexdatr" "kokudosuuchi" "LAGOSNE" #> [148] "landsepi" "latticeDensity" "layer" #> [151] "lazysf" "lconnect" "leafem" #> [154] "leafgl" "leafpm" "leafpop" #> [157] "lidaRtRee" "lidR" "linemap" #> [160] "link2GI" "LMoFit" "lwgeom" #> [163] "macleish" "MainExistingDatasets" "mapboxapi" #> [166] "mapchina" "mapedit" "mapi" #> [169] "mapiso" "mapme.biodiversity" "mapping" #> [172] "mapsapi" "mapscanner" "mapsf" #> [175] "mapSpain" "maptiles" "mapview" #> [178] "MazamaSpatialPlots" "meteoland" "meteospain" #> [181] "mgwrsar" "micromapST" "mlr3spatial" #> [184] "MODISTools" "MODIStsp" "motif" #> [187] "moveVis" "mregions" "MTA" #> [190] "naturaList" "ncdfgeom" "ndi" #> [193] "NetLogoR" "netmap" "nhdplusTools" #> [196] "nhdR" "NipponMap" "njgeo" #> [199] "nlrx" "nominatimlite" "oceanic" #> [202] "oceanis" "opendatatoronto" "openeo" #> [205] "opentripplanner" "Orcs" "osmextract" #> [208] "osrm" "otpr" "owidR" #> [211] "ows4R" "ozmaps" "paleopop" #> [214] "parlitools" "pct" "pgirmess" #> [217] "PL94171" "PlanetNICFI" "plotdap" #> [220] "plotKML" "populR" "potential" #> [223] "pRecipe" "prisonbrief" "pspatreg" #> [226] "PWFSLSmoke" "qualmap" "quickmapr" #> [229] "r5r" "raceland" "rangemap" #> [232] "rangeMapper" "rasterbc" "rasterDT" #> [235] "rasterpic" "raytracing" "rbenvo" #> [238] "rcage" "redist" "redistmetrics" #> [241] "Relectoral" "remap" "rerddapXtracto" #> [244] "rFIA" "rfishnet2" "RFmerge" #> [247] "rgeoda" "rgeopat2" "rgugik" #> [250] "rmapshaper" "rmapzen" "rnaturalearth" #> [253] "rnrfa" "roads" "robis" #> [256] "RPyGeo" "Rsagacmd" "RStoolbox" #> [259] "rts2" "rtsVis" "RWmisc" #> [262] "sabre" "safedata" "sandwichr" #> [265] "SDLfilter" "secr" "seedreg" #> [268] "segmetric" "sen2r" "sfarrow" #> [271] "sfdct" "sfdep" "sfhotspot" #> [274] "sfnetworks" "sftrack" "sgsR" #> [277] "simodels" "simplevis" "sits" #> [280] "slendr" "smartmap" "smile" #> [283] "SMITIDstruct" "smoothr" "spacejamr" #> [286] "spatgeom" "spatialEco" "SpatialKDE" #> [289] "SpatialPosition" "spatialrisk" "spatialsample" #> [292] "spectator" "spectralR" "sphet" #> [295] "spmodel" "spnaf" "spNetwork" #> [298] "spqdep" "SRTsim" "starsTileServer" #> [301] "stats19" "stplanr" "stppSim" #> [304] "sugarbag" "SUNGEO" "supercells" #> [307] "swfscDAS" "swfscMisc" "SWMPrExtension" #> [310] "SWTools" "synoptReg" "tanaka" #> [313] "telemac" "terrainr" "tidycensus" #> [316] "tidygeoRSS" "tidyterra" "tidytransit" #> [319] "tidyUSDA" "tigris" "tilemaps" #> [322] "tinytiger" "tmap" "tmaptools" #> [325] "tongfen" "track2KBA" "trackeRapp" #> [328] "transformr" "treePlotArea" "treetop" #> [331] "trigpoints" "uavRmp" "upstartr" #> [334] "valhallr" "valuemap" "VancouvR" #> [337] "VARMER" "vein" "velociraptr" #> [340] "VicmapR" "vietnameseConverter" "waywiser" #> [343] "weed" "WEGE" "wildlifeDI" #> [346] "zonebuilder" package_network |> enhancing("sf", exact = TRUE) #> [1] "landscapemetrics"

`sf`

packagepackage_network |> depending_on("sf", exact = TRUE) #> [1] "APAtree" "arcpullr" "basf" "bcmaps" "canadamaps" #> [6] "CCAMLRGIS" "chilemapas" "ecochange" "GADMTools" "habCluster" #> [11] "micromap" "nngeo" "prioritizr" "RCzechia" "RGISTools" #> [16] "rLFT" "sftime" "siland" "spatialreg" "spdep" #> [21] "spsurvey" "sspm" "stars" "starsExtra" "stcos" #> [26] "tilegramsR" "transfR" "wdnr.gis" "wdpar" "windAC"

`sf`

packagepackage_network |> dependency_of("sf", exact = TRUE) #> [1] "methods"

package_network |> maintained_by("Helen") #> [1] "bild" "cold" "GENLIB" "microPop" "villager"

package_network |> maintained_by("Helen", flat = FALSE) |> dim() #> [1] 5 67

`data.table`

package_network |> maintainer_of("data.table", exact = TRUE) #> [1] "Matt Dowle"

`trackeRapp`

trackeRapp_maintainer <- package_network |> maintainer_of("trackeRapp", exact = TRUE) package_network |> email_of(trackeRapp_maintainer, exact = TRUE) #> [1] "ioannis.kosmidis@warwick.ac.uk"

package_network |> email_with("warwick.ac.uk") #> [1] "nick.parsons@warwick.ac.uk" "ioannis.kosmidis@warwick.ac.uk" #> [3] "haotian.xu@warwick.ac.uk" "s.tavakoli@warwick.ac.uk" #> [5] "d.selby@warwick.ac.uk" "s.stein@warwick.ac.uk" #> [7] "Nicole.Schwitter.1@warwick.ac.uk" "tom.berrett@warwick.ac.uk" #> [9] "a.dickerson@warwick.ac.uk" "d.firth@warwick.ac.uk" #> [11] "michelle.kendall@warwick.ac.uk"

`semnar`

packagepackage_network |> title_of("semnar", exact = TRUE) #> character(0) package_network |> description_of("semnar", exact = TRUE) #> character(0) package_network |> version_of("semnar", exact = TRUE) #> character(0)

package_network |> release_date_of(Inf) |> hist(breaks = 50, main = "", xlab = "date", freq = TRUE)

Since version 0.5 **cranly** provides methods to construct word clouds of either author names, package descriptions or package titles. For example, the word cloud of the descriptions of the packages maintained by me and Edzer Pebesma are

word_cloud(package_network, maintainer = "Ioannis Kosmidis", exact = TRUE, min.freq = 1)

word_cloud(package_network, maintainer = "Edzer Pebesma", exact = TRUE, min.freq = 1)

or the word cloud of the titles of those packages are

word_cloud(package_network, maintainer = "Ioannis Kosmidis", perspective = "title", exact = TRUE, scale = c(2, 0.1), min.freq = 1)

word_cloud(package_network, maintainer = "Edzer Pebesma", perspective = "title", exact = TRUE, scale = c(2, 0.1), min.freq = 1)

More complex queries can be achieved by using the extractor functions and computing the term frequencies manually. For example, the word cloud of all packages maintained by people with "warwick.ac.uk" in their email is

warwick_emails <- package_network |> email_with("warwick.ac.uk", flat = FALSE) warwick_pkgs <- warwick_emails$package descriptions <- package_network |> description_of(warwick_pkgs, exact = FALSE) term_frequency <- compute_term_frequency(descriptions) word_cloud(term_frequency, min.freq = 5)

**Any scripts or data that you put into this service are public.**

Embedding an R snippet on your website

Add the following code to your website.

For more information on customizing the embed code, read Embedding Snippets.