1

複雑になりすぎずに単純なジェネリック関数を作成するにはどうすればよいですか? 私はこのようなものが欲しい:

inputA <- function(a,b){
    return(structure(c(a=a,b=b), class= "inputclassA"))
}

inputB <- function(c,d){
  return(structure(c(c=c,d=d), class= "inputclassB"))
}  

mathstuff.inputclassA <- function(inp){
  print("inputtype: inputclassA")
  inp['a'] + inp['b']
}  

mathstuff.inputclassB <- function(inp){
  print("inputtype: inputclassB")
  inp['c'] - inp['d']
}

mystructure <- inputA(4,2)
mathstuff(mystructure) #should return 6

mystructure <- inputB(4,2)
mathstuff(mystructure) #should return 4

これまでのところ、私はこのように解決しました

classCheck<-function(obj,checkIs){
  return (attr(obj,"class") == checkIs)
}

しかし、もっと良い方法はありませんか?

4

1 に答える 1

1

わかりました。

これが鍵です。残念なことに、「関連する」スレッドに答えがあったことに気づきませんでした。

mathstuff <- function(x,...) UseMethod("mathstuff")

したがって、これは素晴らしく機能します。すみません、悪いです。

inputA <- function(a,b){
  return(structure(c(a=a,b=b), class= "inputclassA"))
}

inputB <- function(c,d){
  return(structure(c(c=c,d=d), class= "inputclassB"))
}  

#make generic function
mathstuff <- function(x,...) UseMethod("mathstuff")

mathstuff.inputclassA <- function(inp){
  print("inputtype: inputclassA")
  inp['a'] + inp['b']
}  

mathstuff.inputclassB <- function(inp){
  print("inputtype: inputclassB")
  inp['c'] - inp['d']
}

mystructure <- inputA(4,2)
mathstuff(mystructure) 

mystructure <- inputB(4,2)
mathstuff(mystructure) 
于 2013-09-05T14:25:14.917 に答える