我正在尝试使用一个函数来修改由自编写的类定义的对象的内容,该函数接受此类的两个对象并添加内容。
setClass("test",representation(val="numeric"),prototype(val=1))
我知道R并不适用于“按引用调用”,但可以使用类似这样的方法模仿该行为:
setGeneric("value<-", function(test,value) standardGeneric("value<-"))
setReplaceMethod("value",signature = c("test","numeric"),
definition=function(test,value) {
test@val <- value
test
})
foo = new("test") #foo@val is 1 per prototype
value(foo)<-2 #foo@val is now set to 2
直到这里,我所做的任何事情都得到了我在stackexchange上的研究
Call by reference in R (using function to modify an object)
和来自讲座的this code(用德语评论和写作)
我现在希望通过以下方法获得类似的结果:
setGeneric("add<-", function(testA,testB) standardGeneric("add<-"))
setReplaceMethod("add",signature = c("test","test"),
definition=function(testA,testB) {
testA@val <- testA@val + testB@val
testA
})
bar = new("test")
add(foo)<-bar #should add the value slot of both objects and save the result to foo
Instead I get the following error:
Error in `add<-`(`*tmp*`, value = <S4 object of class "test">) :
unused argument (value = <S4 object of class "test">)
函数调用适用于:
"add<-"(foo,bar)
但这并没有将价值保存到foo中。使用
foo <- "add<-"(foo,bar)
#or using
setMethod("add",signature = c("test","test"), definition= #as above... )
foo <- add(foo,bar)
有效,但这与修改方法value(foo)<-2
不一致
我觉得我在这里缺少一些简单的东西。
非常感谢任何帮助!
答案 0 :(得分:0)
我不记得为什么,但对于&lt; - 函数,最后一个参数必须命名为&#39; value&#39;。 所以在你的情况下:
setGeneric("add<-", function(testA,value) standardGeneric("add<-"))
setReplaceMethod("add",signature = c("test","test"),
definition=function(testA,value) {
testA@val <- testA@val + value@val
testA
})
bar = new("test")
add(foo)<-bar
您也可以使用Reference类ig,以避免将传统的参数作为值。