我定义了一个名为 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/

10-12 17:48