3

我目前正在开发工具的“帮助”下在 R 中开发一个包。也就是说,包load_all(path = ...)在这个阶段被加载到 R studio 中,并且我的 R 目录中的函数可用。到目前为止,一切都很好。但是当我尝试在我的包中实现一个简单的 S3 层次结构时,调度将不起作用 - 它会引发以下错误:

UseMethod(“generic_function”,obj)中的错误:没有适用于“generic_function”的适用方法应用于类“c('data.frame','myclass')”的对象

但是,当我实现相同的通用函数及其方法并将它们显式加载到当前环境中时,调度将起作用。

我无法解释这里发生了什么。当我加载包时,调度将根本不起作用,但在环境中“动态加载”时它会起作用。

我感谢您的帮助。BR

...根据要求提供代码:

scaler <- function (solvertraj, ...) {
  UseMethod("scaler", solvertraj)
}

scaler.scale_multi <- function(solvertraj, ...){
  resls = list()
  ls = c("incumbant", "average.fitness")
  min_inc = min(solvertraj$incumbant)
  max_inc = max(solvertraj$incumbant)
  
  for(i in 1:length(ls)){
    tobe_scaled = ls[i]
    tmp = sapply(solvertraj[tobe_scaled], function(x){
      (x-min_inc) / (max_inc -min_inc)
    })
    resls[[i]] = tmp
  }
  #attr(solvertraj,'MIN_MAX_scaled') <<- TRUE
  return(resls)
} 

scaler.scale_other <- function(solvertraj, ...){
  res = list()
  plls = list()
  shapirols = list()
  resls = list()
  ls = c("incumbant", "average.fitness")
  
  for(i in 1:length(ls)){
    col = ls[i]
    # 1) shrink range
    tmp = sapply(solvertraj[col], function(x){
      x - min(solvertraj["incumbant"])
    })
    # 2) use natural logarithm
    tmp_2 = sapply(tmp, log)
    tmp_2[length(tmp_2)] <- 0L
    res[[i]] = tmp_2
    
    # TODO: fix
    plot_trans = plot(density(tmp_2))
    plls[[i]] = plot_trans
    
    tmp_test = shapiro.test(tmp_2)
    shapirols[[i]] <- tmp_test
  }
  
  resls = list.append(resls,
                      scales = res,
                      plots = plls,
                      shapirols = shapirols)

  #attr(solvertraj,'SHRINKAGE_scaled') <<- TRUE
  return(resls)
} 
4

0 回答 0