Tomas
Tomas

Reputation: 59575

"unused arguments" error when using a method

This is really a mystery for me. I have defined my method like this (for class "graf"):

addStatistics <- function(x) UseMethod("addStatistics")
addStatistics.graf <- function (x, stat_name = NULL, value = NULL)
{
    if (stat_name == "env_coef_delta_mnll") {
        x$env_coef_delta_mnll <- value
    }
    x
}

I am calling the method like this, and getting an error:

addStatistics(m, "env_coef_delta_mnll", 0)
#Error in addStatistics(m, "env_coef_delta_mnll", 0) : 
#  unused arguments ("env_coef_delta_mnll", 0)

Why the method doesn't accept those supplied arguments and says they are "unused"?

Upvotes: 3

Views: 554

Answers (2)

Rui Barradas
Rui Barradas

Reputation: 76663

Here is a way of solving the problem. Apparently you are creating a setter function, so I will change the generic a bit.

`addStatistics<-` <- function(x, ...) UseMethod("addStatistics<-")
`addStatistics<-.graf` <- function (x, stat_name = NULL, value = NULL)
{
  if (stat_name == "env_coef_delta_mnll") {
    x$env_coef_delta_mnll <- value
  }
  x
}

as.graf <- function(x){
  class(x) <- "graf"
  x
}
x <- as.graf(list())

addStatistics(x, "env_coef_delta_mnll") <- 1234
x
#$env_coef_delta_mnll
#[1] 1234
#
#attr(,"class")
#[1] "graf"

Upvotes: 1

Allan Cameron
Allan Cameron

Reputation: 174546

@GGrothendieck beat me to the punch, but here's a reprex to prove it;

addStatistics <- function(...) UseMethod("addStatistics")

addStatistics.graf <- function (x, stat_name, value)
{
  if(!missing(stat_name)){
    if (stat_name == "env_coef_delta_mnll") {
        x$env_coef_delta_mnll <- value
    }}
    x
}

m <- list(env_coef_delta_mnll = 3)
class(m) <- "graf"

addStatistics(m, stat_name = "env_coef_delta_mnll", 4)
#> $env_coef_delta_mnll
#> [1] 4
#> 
#> attr(,"class")
#> [1] "graf"

Created on 2020-02-20 by the reprex package (v0.3.0)

Upvotes: 0

Related Questions