在 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'))
}
出于测试目的,我想要一种新的赋值运算符,比如 %<-%
,它在执行赋值时将值保存到文件中。这基本上意味着我可以检查函数的不同调用 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'))
}