gpt4 book ai didi

r - 如果我只知道对象的名称作为字符串,如何覆盖 R 中的对象?

转载 作者:行者123 更新时间:2023-12-04 04:50:19 25 4
gpt4 key购买 nike

在我的 R 函数中,我正在处理一个字符串,该字符串包含位于工作区某处的对象的名称。我想覆盖对象(例如,将对象转换为矩阵)。

但是,我只知道对象的名称作为字符串,而我没有对象引用。我知道我可以使用 get(x) 将字符串转换为对象引用。函数(其中 x 是指对象的字符串),或类似 eval(as.name(x)) .但是,这仅适用于访问对象,而不适用于覆盖对象。

我怎样才能做到这一点?这是一些代码:

myvector <- 1:5              # my object
x <- "myvector" # text representation of the object
get(x) <- as.matrix(get(x)) # my first attempt
eval(as.name(x)) <- as.matrix(eval(as.name(x))) # second attempt

请注意,第一行不是我想在工作区中覆盖此对象的函数的一部分,所以我不能只写 myvector <- as.matrix(myvector) .

最佳答案

您尝试按名称分配函数内的全局变量。为什么?应该避免操作全局变量,正如评论中所说,应该存在更好的方式来处理您的问题并避免全局变量的副作用。
您应该使用 assign按名称更改值。默认情况下,它会更改当前环境(本地)中的值,因此您还应该设置在哪个环境中定义变量。像这样的事情:

 assign( x , as.matrix(get(x)),envir=.GlobalEnv)

或者,告诉 assign搜索直到遇到变量:
 assign( x , as.matrix(get(x)),inherits=TRUE)

编辑更好的解决方案
  • 返回新值并稍后在全局环境中赋值
    assign( x , function(x){....})
  • 如果变量是一种全局设置,您可以定义一个环境来定义 myvector。
    myoptions <- new.env()
    myoptions$myvalue <- 1:5
    function(x){ assign(x,newvalue,myoptions )}
  • 关于r - 如果我只知道对象的名称作为字符串,如何覆盖 R 中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17522948/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com