我定义了一个名为 once
的函数,如下所示:
once <- function(x, value) {
xname <- deparse(substitute(x))
if(!exists(xname)) {
assign(xname, value, env=parent.frame())
}
invisible()
}
这个想法是
value
计算起来很耗时,我只想在我第一次运行脚本时将它分配给 x
。> z
Error: object 'z' not found
> once(z, 3)
> z
[1] 3
我真的很喜欢使用
once(x) <- value
而不是 once(x, value)
,但是如果我编写一个函数 once<-
,它会因为变量不存在而感到不安:> once(z) <- 3
Error in once(z) <- 3 : object 'z' not found
有没有人有办法解决这个问题?
ps:是否有一个名称来描述像
once<-
或一般的 f<-
之类的函数? 最佳答案
根据 R 语言引用中的 3.4.4 项,名称替换之类的评估如下:
`*tmp*` <- x
x <- "names<-"(`*tmp*`, value=c("a","b"))
rm(`*tmp*`)
这对您的要求来说是个坏消息,因为分配将在第一行失败(因为找不到 x),即使它可以工作,您的
deparse(substitute)
调用也永远不会评估您想要的结果。抱歉让你失望了
关于r - 如何使用替换功能创建自定义分配?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7509910/