【问题标题】:Passing functions to R with f(myclass.myfunc) syntax使用 f(myclass.myfunc) 语法将函数传递给 R
【发布时间】:2020-04-11 05:08:38
【问题描述】:

我是 R 的新手。我用谷歌搜索了我的问题,但没有找到完全解决我正在寻找的问题。我知道您可以将函数传递给其他函数,但我想将类似“对象”的变量传递给一个函数,而其他函数则绑定到“对象”。这就是我的意思

model1.calculation1 = function() {
    print( "model1.calculation1" )
}
model2.caclulation1 = function() {
    print( "model2.calculation2" ) 
}

runModel = function( model ) {
    model.calculation1() 
}
runModel( model1 )
runModel( model2 )

和错误信息:

Error in model.calculation1() : 
  could not find function "model.calculation1"

请注意,在将函数绑定到它们之前,我没有做任何事情来实例化任何模型 1 或模型 2。有没有办法做到这一点?谢谢!

【问题讨论】:

  • 拼写错误。检查拼写......你想要:model1.calculation1()
  • 不,我希望runModel 在我作为参数传递的模型上调用calculation1
  • 谢谢爱德华,但我没有错字。我之所以调用model.caclulation1() 而不是model1.calculation1() 是因为model 是runModel 的函数参数名称。我希望 runModel 在我作为参数传递给它的任何模型上调用 calculation1
  • 这是我会在 javascript 中做的事情,并且知道 R 是它自己的东西,所以我想知道我是否可以用类似的语法来实现这一点,或者我是否需要求助于类而不是什么。
  • 很公平,但是错误仍然抛出```找不到函数“model.calculation1”```并且修复错字并重新运行仍然给出了同样的错误。

标签: r function arguments


【解决方案1】:

我想你正在寻找substitute

runModel = function( model ) {
  s <- substitute(model)
  if(s=="model1")
    model1.calculation1() 
  else
    model2.calculation1() 
}

runModel( model1 )
# [1] "model1.calculation1"

runModel( model2 )
# [1] "model2.calculation2"

model1 <- lm(mpg~hp, data=mtcars)
model2 <- lm(mpg~hp+am, data=mtcars)

【讨论】:

    猜你喜欢
    • 2019-04-01
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 2012-11-22
    • 1970-01-01
    • 2013-04-25
    • 1970-01-01
    • 2018-12-28
    相关资源
    最近更新 更多