有许多R函数可以从外部运算符传递给它们的值。例如:names(mydata)<-c("x1","x2","x3")
或ggplot(mydata, aes(x=x,y=y))+geom_point()
。
说我想写一个缩短的函数来映射函数&#34; names&#34;:
nm <- names
> nm(mydata)
[1] "x" "y"
.... unknown code
nm(mydata) <- c("x1","x2")
> nm(mydata)
[1] "x1" "x2"
答案 0 :(得分:3)
试试这个:
`nm<-` <- `names<-`
答案 1 :(得分:1)
我会指导你一个出色的post on Function operators by Hadley Wickham。 Hadley在那里列出了大量代码示例,并有明确的解释。 Hadley用来说明函数运算符的一个例子是他为简单函数chatty()编写的代码。这是为函数提供的初始简单代码:
library(parallel)
chatty <- function(f) {
function(x) {
res <- f(x)
cat(format(x), " -> ", format(res, digits = 3), "\n", sep = "")
res
}
}
下面,您可以看到我们调用函数:
s <- c(0.4, 0.3, 0.2, 0.1)
x2 <- lapply(s, chatty(Sys.sleep))
函数调用的输出是:
#> 0.4 -> NULL
#> 0.3 -> NULL
#> 0.2 -> NULL
#> 0.1 -> NULL
以下是使用mclapply的替代应用程序:
x2 <- mclapply(s, chatty(Sys.sleep))
这是输出:
#> 0.3 -> NULL
#> 0.4 -> NULL
#> 0.1 -> NULL
#> 0.2 -> NULL
在其他编程语言中使用函数运算符方面(因为你曾询问过这种现象的定义),Hadley强调了它们在编程语言中非常常见的事实。正如哈德利写的(我引用):
函数运算符广泛用于像Haskell这样的FP语言,通常用于Lisp,Scheme和Clojure。
它们是JavaScript编程的重要组成部分,就像在underscore.js库中一样。
它们在CoffeeScript中特别常见,因为它的匿名函数语法非常简洁。
Python的装饰器只是一个不同名称的函数运算符。
在Java中,它们非常罕见,因为操作函数很困难(尽管如果将它们包装在策略类型的对象中,则可能)。
它们在C ++中也很少见,因为虽然可以通过重载()运算符来创建像函数一样工作的对象(&#34;仿函数&#34;),但是用其他对象修改这些对象函数不是一种常见的编程技术。也就是说,C ++ 11包含部分应用程序(std :: bind)作为标准库的一部分。