全局标记(tag)一个对象传递为函数参数(例如,通过属性)



我试图将对象标记为我的功能中的"已经处理"并使用属性。这是不起作用的,因为当我设置属性时,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

如何从功能中更改原始对象(变量x)?

ps:我无法使用函数的返回值,因为呼叫者会忽略此(更确切地说:我在tryCatch的错误处理程序函数中,想"标记"错误条件对象通过r)将第一个参数传递给错误处理程序函数:

tryCatch(stop("damn"),
         error = function(e) {
           attr(e, "my.tag") <- 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

相关内容

最新更新