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