R 全局标记(标记)作为函数参数传递的对象(例如,通过属性)

R 全局标记(标记)作为函数参数传递的对象(例如,通过属性),r,R,我试图在函数中将对象标记为“已处理”,并使用属性进行处理。这不起作用,因为当我设置属性时,R生成本地副本,所以我更改的是副本,而不是原始对象: x <- "object 1" attr(x, "attr1") <- TRUE setAttr2 <- function(o) { attr(o, "attr2") <- TRUE invisible(NULL) # no return value possible } x # [1] "object 1" # a

我试图在函数中将对象标记为“已处理”,并使用属性进行处理。这不起作用,因为当我设置属性时,R生成本地副本,所以我更改的是副本,而不是原始对象:

x <- "object 1"
attr(x, "attr1") <- TRUE

setAttr2 <- function(o) {
  attr(o, "attr2") <- TRUE
  invisible(NULL)  # no return value possible
}

x
# [1] "object 1"
# attr(,"attr1")
# [1] TRUE

setAttr2(x)
x               # the attribute has not been set
# [1] "object 1"
# attr(,"attr1")
# [1] TRUE

看看这是否适合你

setAttr2 <- function(o) {
  var <- deparse(substitute(o))
  var_2 <- get(var)
  attr(var_2, "attr2") <- TRUE
  var_2
}

setAttr2(x)

> setAttr2(x)
[1] "object 1"
attr(,"attr2")
[1] TRUE

setAttr2 THX,使用
get
是个好主意!我已经试过了,但我认为它不起作用(例如
setAttr2(x);x
显示函数调用后,函数的返回值只有
attr2
,而不是
x
。奇怪的是,
x不能使用返回值的原因是因为我在R的错误条件处理函数中,我想在条件obje中添加一个属性CT(参数<代码> e <代码>下面),我不能改变R来考虑我的返回值:<代码> TyMe抓获(停止(“DAMN”),错误=函数(E){AtTr(E,“我的.TAG”)),抱歉。我再考虑一下。
setAttr2 <- function(o) {
  var <- deparse(substitute(o))
  var_2 <- get(var)
  attr(var_2, "attr2") <- TRUE
  var_2
}

setAttr2(x)

> setAttr2(x)
[1] "object 1"
attr(,"attr2")
[1] TRUE