在 R 中,如何从函数向 S4 对象附加新信息?
In R, how can I append new information to S4 objects from a function?
我正在将表示变量名称的字符串传递给函数。本质上我想向变量添加新信息,我遇到的问题是它实际上并没有将新信息附加到 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 中不是这样工作的。在 R 中,点是变量名和函数的完全有效部分,就像下划线一样。当您为 myS4.myNum
赋值时,您只是在创建一个具有该名称的新变量,正如您发现的那样。
以下是 S4 槽如何使用的简短示例:
setClass("my_class", representation(my_val = "numeric"))
my_object <- new("my_class")
my_object@my_val <- 5
但是还有更多内容,超出了 SO 答案的范围。查看 http://adv-r.had.co.nz/S4.html 等,了解有关 S4 对象如何工作的更多信息。
我正在将表示变量名称的字符串传递给函数。本质上我想向变量添加新信息,我遇到的问题是它实际上并没有将新信息附加到 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 中不是这样工作的。在 R 中,点是变量名和函数的完全有效部分,就像下划线一样。当您为 myS4.myNum
赋值时,您只是在创建一个具有该名称的新变量,正如您发现的那样。
以下是 S4 槽如何使用的简短示例:
setClass("my_class", representation(my_val = "numeric"))
my_object <- new("my_class")
my_object@my_val <- 5
但是还有更多内容,超出了 SO 答案的范围。查看 http://adv-r.had.co.nz/S4.html 等,了解有关 S4 对象如何工作的更多信息。