【发布时间】:2017-10-13 19:58:30
【问题描述】:
我将一个代表变量名的字符串传递给一个函数。本质上我想向变量添加新信息,我遇到的问题是它实际上并没有将新信息附加到 S4 对象,它只是用 myObjName.newinfo 创建一个新变量,实际上与原始变量无关目的。
这是我迄今为止尝试过的。
myS4 <- makeSomeS4()
myFunction <- function(myS4name)
{
#Get the actual s4 object based on the variable name.
res <- get(myS4name)
#Make sure they're passing us the correct type of object.
try(if(typeof(res) != "S4") stop("Error: extract_res_data requires S4 type object as result set for parameter res."))
#I've tried this way with eval.
myNum = 5
myNum_assign <- paste(myS4name, ".myNum", " <<- ", myNum, sep="")
eval(parse(text=myNum_assign))
#I've tried this way with assign.
myNum = 5
myNum_assign = paste(resName, ".myNum", sep="")
assign(myNum_assign, myNum, envir = .GlobalEnv)
}
所以现在我可以运行这个函数,然后说
> myFunction("myS4")
> myS4.myNum
5
乍一看还不错,但实际上 myS4.myNum 是它自己的变量,与 myS4 无关。因此,如果我稍后将 myS4 传递给另一个函数,然后尝试访问 .myNum,它就不存在了。
如何正确地将新值附加到 S4?它并不总是简单的数据集,有时我需要附加数据框或列表。
感谢任何人提供的任何帮助。
【问题讨论】:
-
您不应传递带有对象名称的字符串。您应该将对象传入并返回修改后的对象。
-
是的,我知道这一点。实际上我确实有这样做的理由,但我可能不得不牺牲这些计划并最终这样做。
标签: r function object data-structures s4