最新版本的 d3 不再包含 d3-collection 模块中包含的功能。看起来 r2D3 现在默认使用这个版本 (d3v6),但 bipartiteD3 仍然使用它。这意味着它无法访问 d3.nest(),这解释了您的错误,因为 d3.nest 不再是 d3 的方法。
BipartiteD3 可以相对容易地更新,但同时有一些选项可以纠正这个问题,例如,您可以执行以下操作之一:
- 安装旧版本的 r2d3 以替换当前版本
例如:
packageurl <- "https://cran.r-project.org/src/contrib/Archive/r2d3/r2d3_0.2.3.tar.gz"
install.packages(packageurl, repos=NULL, type="source")
或
- 在本地编辑 r 包源文件以将正确的版本传递给 r2d3(使用
d3_version = "5" 完成)
或
- 创建一个包含所有
bipartite_D3 的新函数,同时传递一个版本参数(同样使用d3_version = "5" 完成,与#2 基本相同,但不修改bipartiteD3 源)
例如:
library(r2d3)
library(bipartite )
library(purrr)
library(dplyr)
library(tidyr)
library(stringr)
library(tibble)
library(RColorBrewer)
library(bipartiteD3)
testdata <- data.frame(higher = c("bee1","bee1","bee1","bee2","bee1","bee3"),
lower = c("plant1","plant2","plant1","plant2","plant3","plant4"),
webID = c("meadow","meadow","meadow","meadow","meadow","meadow"), freq=c(5,9,1,2,3,7))
bipartite::frame2webs(testdata)-> SmallTestWeb
Used3v5<- function(data,
filename='bipartiteD3Script',
PrimaryLab = 'Primary',
SecondaryLab='Secondary',
SiteNames=NULL,
colouroption=c('monochrome', 'brewer', 'manual')[1],
HighlightLab = 'Unlinked',
HighlightCol = '#3366CC',
monoChromeCol = 'rgb(56,43,61)',
ColourBy = c(1, 2)[2],
BrewerPalette = 'Accent',
NamedColourVector,
MainFigSize = NULL,
SortPrimary=NULL,
SortSecondary=NULL,
mp = c(1,1),
MinWidth=10,
Pad=1,
IndivFigSize= c(200, 400),
BarSize = 35,
Orientation = c('vertical', 'horizontal')[1],
EdgeMode = c('straight','smooth' )[2],
BoxLabPos = NULL,
IncludePerc = TRUE,
PercentageDecimals =0,
PercPos = NULL,
CSS_Output_Supress = FALSE,
PRINT=FALSE){
df<-NULL
if(tibble::is_tibble(data)){
data<- as.data.frame(data)
}
if(is.data.frame(data)){
df<- data
}else{
if(is.list(data)){
df<-List2DF(data, PrimaryLab,SecondaryLab,SiteNames)
}else{
dimensions<-length(dim(data))
if(dimensions ==3){
df<-Array2DF(data, PrimaryLab,SecondaryLab,SiteNames)
}
if(dimensions==2){
df<-Matrix2DF(data,PrimaryLab,SecondaryLab, SiteNames)
}
}
}
if(is.null(df)){#
stop('invalid data input. Valid forms are data frame, bipartite style matrix, list or array')
}
if((mp[2]*mp[1])> (ncol(df)-2)){
warning('Making too many facets. Are you sure mp is set ok?')
}
if((mp[2]*mp[1])< (ncol(df)-2)){
warning('Making too few facets. Guessing you want 1 row')
mp[2]<-ncol(df)-2
}
if(is.null( MainFigSize)){
MainFigSize<-c(mp[2]*700, mp[1]*700) # Having a reasonable guess at a default overall figure size
}
BP_JS_Writer(df = df,filename = filename,
colouroption = colouroption,
HighlightLab = HighlightLab,
HighlightCol = HighlightCol,
monoChromeCol = monoChromeCol,
ColourBy = ColourBy,
BrewerPalette = BrewerPalette,
NamedColourVector = NamedColourVector,
MainFigSize = MainFigSize ,
SortPrimary = SortPrimary,
SortSecondary = SortSecondary,
mp = mp,
MinWidth = MinWidth,
Pad = Pad,
IndivFigSize = IndivFigSize,
BarSize = BarSize ,
Orientation = Orientation,
EdgeMode = EdgeMode,
AxisLabels= c(PrimaryLab, SecondaryLab),
FigureLabel = SiteNames,
BoxLabPos = BoxLabPos,
IncludePerc = IncludePerc ,
PercentageDecimals = PercentageDecimals,
PercPos = PercPos,
CSS_Output_Supress = CSS_Output_Supress ,
PRINT = PRINT)
LoadVisJS()
# only line changed here to add d3_version = "5"
r2d3::r2d3(data = NA, d3_version="5", script = paste0(filename,".js"),
height= MainFigSize[2], width= MainFigSize[1] ,
dependencies ="vizjs.js")
}
Used3v5(SmallTestWeb)