requireNamespace 未加载所需的功能
requireNamespace not loading required function
我正在使用 neuralnet
来训练神经网络。该包,更具体地说是 neuralnet
的绘图功能,取决于 grid
,这是自去年以来的基础包。但是,除非我手动加载 grid
,否则绘图会失败:
AND <- c(rep(0,7),1)
OR <- c(0,rep(1,7))
binary.data <- data.frame(expand.grid(c(0,1), c(0,1), c(0,1)), AND, OR)
net <- neuralnet::neuralnet(AND + OR ~ Var1 + Var2 + Var3, binary.data,
hidden = 0, linear.output=FALSE)
if(requireNamespace("grid")) {
neuralnet::plot.nn(net)
}
> Error in plot.nn(net, rep = i, x.entry, x.out, radius, arrow.length, intercept, :
> could not find function "grid.newpage"
使用 library(grid)
有帮助,但我想避免这种情况,因为我想稍后在我自己的包中使用它。 R Packages 建议使用 requireNamespace
,但这也无济于事,正如我们在上面看到的那样。
在对 grid
函数的所有调用前添加 grid::
并从源代码构建包解决了这个问题,但我想知道:这是预期的行为吗?查看 neuralnet
的来源,我发现没有提及 requireNamespace
、library
或类似内容。但是为什么 my requireNamespace
不负责加载包?
问题是 neuralnet 仅 depends 在 grid 包上,当它应该相反(或至少也是)导入它。 (See here 讨论两者之间的区别。)
因此,当 neuralnet 中的函数调用 grid.newpage()
时,它只能找到该函数 if grid 附加到搜索路径。但是对 neuralnet::neuralnet()
的完全限定调用不会附加 neuralnet,这将触发 grid 的附加;如果搜索路径上没有 grid,它就不知道 grid.newpage
是什么。
要将 grid 导入 neuralnet,将此行添加到源包的 NAMESPACE
文件
import(grid)
并将此行添加到其 DESCRIPTION
文件
Imports: grid
然后重新编译。
我正在使用 neuralnet
来训练神经网络。该包,更具体地说是 neuralnet
的绘图功能,取决于 grid
,这是自去年以来的基础包。但是,除非我手动加载 grid
,否则绘图会失败:
AND <- c(rep(0,7),1)
OR <- c(0,rep(1,7))
binary.data <- data.frame(expand.grid(c(0,1), c(0,1), c(0,1)), AND, OR)
net <- neuralnet::neuralnet(AND + OR ~ Var1 + Var2 + Var3, binary.data,
hidden = 0, linear.output=FALSE)
if(requireNamespace("grid")) {
neuralnet::plot.nn(net)
}
> Error in plot.nn(net, rep = i, x.entry, x.out, radius, arrow.length, intercept, :
> could not find function "grid.newpage"
使用 library(grid)
有帮助,但我想避免这种情况,因为我想稍后在我自己的包中使用它。 R Packages 建议使用 requireNamespace
,但这也无济于事,正如我们在上面看到的那样。
在对 grid
函数的所有调用前添加 grid::
并从源代码构建包解决了这个问题,但我想知道:这是预期的行为吗?查看 neuralnet
的来源,我发现没有提及 requireNamespace
、library
或类似内容。但是为什么 my requireNamespace
不负责加载包?
问题是 neuralnet 仅 depends 在 grid 包上,当它应该相反(或至少也是)导入它。 (See here 讨论两者之间的区别。)
因此,当 neuralnet 中的函数调用 grid.newpage()
时,它只能找到该函数 if grid 附加到搜索路径。但是对 neuralnet::neuralnet()
的完全限定调用不会附加 neuralnet,这将触发 grid 的附加;如果搜索路径上没有 grid,它就不知道 grid.newpage
是什么。
要将 grid 导入 neuralnet,将此行添加到源包的 NAMESPACE
文件
import(grid)
并将此行添加到其 DESCRIPTION
文件
Imports: grid
然后重新编译。