在 R 中引用参数

Quoting parameters in R

出于测试目的,我想要一种新的赋值运算符,比如 %<-%,它在执行赋值时将值保存到文件中。这基本上意味着我可以检查函数的不同调用 return 是否具有相同的值。

例如,如果我写 answer %<-% 42,我希望 42 被分配给对象 answer,同时在中创建一个 answer.rds我的工作目录 readRDS('answer.rds') == 42.

我尝试使用 substitute 和其他实用程序,但不知道如何正确引用参数。

> `%<-%` <- function(name, value) {name <- value; dput(name)}
> answer %<-% 42
42
> `%<-%` <- function(name, value) {name <- value; dput(substitute(name))}
> answer %<-% 42
42
> `%<-%` <- function(name, value) {name <- value; dput(quote(name))}
> answer %<-% 42
name

要将未计算的表达式转换为字符串,您应该使用 deparse(substitute(x))

在你的例子中,这样的事情应该有效:

`%<-%` <- function(name, value) {
  assign(deparse(substitute(name)), value, envir = .GlobalEnv)
  saveRDS(value, paste0(deparse(substitute(name)),'.rds'))
}
answer %<-% 1

answer
#[1] 1

readRDS('answer.rds')
#[1] 1

编辑:

正如您在评论中指出的那样,此函数使用 inherits = T 比始终分配给全局环境更有意义,因此:

`%<-%` <- function(name, value) {
  assign(deparse(substitute(name)), value, inherits = T)
  saveRDS(value, paste0(deparse(substitute(name)),'.rds'))
}