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