gpt4 book ai didi

r - 运算符重载在 R 包中停止工作

转载 作者:行者123 更新时间:2023-12-02 11:22:21 24 4
gpt4 key购买 nike

我有一个基本上是一个列表的容器类。因为我想支持子集,我重载了子集[运算符(可能执行不善)。

#' Constructor for spectra object
.spectra = function(n_spectrum = 0) {
object = vector(mode = "list", n_spectrum)
class(object) = "spectra"
return(object)
}

#' Operator overload
#' @export
`[.spectra` = function(x, i) {
x = unclass(x)
x = x[i] # Using the list's subset function
class(x) = "spectra"
return(x) # Should return a "spectra" object, not a list
}

现在,这在我的开发环境中按预期工作(当我调试包时)。也就是说,如果 y_oldspectra对象和我做 y_new = y_old[-1] , y_new仍然是 spectra目的。

然而, 当我将项目编译为包并安装时 ,子集运算符返回 list而不是 spectra目的。

关于发生了什么的任何线索?

编辑

我忘了提到我正在使用 RStudio 和 devtools图书馆。

最佳答案

这个问题归结为当您选择创建包时 RStudio 对 NAMESPACE 的默认初始化。检查 NAMESPACE 文件显示:

exportPattern("^[[:alpha:]]+")

哪个不匹配子集运算符 [ ,正如弗利克先生指出的那样。

您可以手动向 NAMESPACE 添加名称,也可以让 RStudio 和 Roxygen 为您完成这项工作。在 RStudio 0.99.902 中,您将:
  • install.packages("roxygen2")
  • 查询 使用 Roxygen 生成文档 在菜单中 构建 > 配置构建工具 > 构建工具 .
  • 点击 配置 按钮并检查 命名空间文件 复选框。

  • 现在您显然必须将 Roxygen 文档添加到您的函数中并记住使用 @export标签,例如:
    #' Print hi in R
    #' @export
    print_hi = function(x) print("hi")

    构建后,您应该有一个自动生成的 NAMESPACE 文件。例如:
    # Generated by roxygen2: do not edit by hand

    export(print_hi)

    关于r - 运算符重载在 R 包中停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29736122/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com