Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何使用替换函数创建自定义分配?_R - Fatal编程技术网

R 如何使用替换函数创建自定义分配?

R 如何使用替换函数创建自定义分配?,r,R,我定义了一个名为的函数,如下所示: once <- function(x, value) { xname <- deparse(substitute(x)) if(!exists(xname)) { assign(xname, value, env=parent.frame()) } invisible() } 我真的希望用法是一次(x),根据R语言参考中的项目,类似于名称替换的评估如下: `*tmp*` <- x x &l

我定义了一个名为
的函数,如下所示:

once <- function(x, value) {
    xname <- deparse(substitute(x))
    if(!exists(xname)) {
        assign(xname, value, env=parent.frame())
    }
    invisible()
}
我真的希望用法是
一次(x),根据R语言参考中的项目,类似于名称替换的评估如下:

 `*tmp*` <- x
 x <- "names<-"(`*tmp*`, value=c("a","b"))
 rm(`*tmp*`)

`*tmp*`如果您愿意稍微修改您的需求以使用方括号而不是圆括号,那么您可以这样做:

once <- structure(NA, class = "once")
"[<-.once" <- function(once, x, value) {
    xname <- deparse(substitute(x))
    pf <- parent.frame()
    if (!exists(xname, pf)) assign(xname, value, pf)
    once
}


# assigns 3 to x (assuming x does not currently exist)
once[x] <- 3
x # 3

# skips assignment (since x now exists)
once[x] <- 4
x # 3

一旦它们被称为替换functions@Andrie:SO上是否有编码样式指南?我个人倾向于使用更多的空格,但如果这里有编码标准,我可以通过以后遵循这些标准来节省编辑的时间。@pete网页上的空格太多意味着这个问题不再适合单个屏幕,并且变得很难阅读。那是官方的吗?可能不会。如果你不喜欢它,可以随意恢复到原来的状态。知道其中一种方法是很好的。现在我可以重新命名我的函数
assign\u一次
,停止拖延。另外,RLR调用
fWell,这是我最喜欢的RLR部分。每当我被窃听时,就会发现这一部分与之有关。哇,这既美丽又可怕。喜欢,酷!我使用这种方法创建了一个多返回操作符,类似于python。
 `*tmp*` <- x
 x <- "names<-"(`*tmp*`, value=c("a","b"))
 rm(`*tmp*`)
once <- structure(NA, class = "once")
"[<-.once" <- function(once, x, value) {
    xname <- deparse(substitute(x))
    pf <- parent.frame()
    if (!exists(xname, pf)) assign(xname, value, pf)
    once
}


# assigns 3 to x (assuming x does not currently exist)
once[x] <- 3
x # 3

# skips assignment (since x now exists)
once[x] <- 4
x # 3