【问题标题】:Function name in single quotation marks in RR中单引号中的函数名称
【发布时间】:2014-09-18 01:44:14
【问题描述】:

这可能是一个愚蠢的问题,但我已经困扰了很长时间。我见过人们在定义函数时使用单引号将函数名括起来。我一直想知道这样做的好处。下面是一个幼稚的例子

'row.mean' <- function(mat){
    return(apply(mat, 1, mean))
}

提前致谢!

【问题讨论】:

  • 你确定它们不是反引号吗?
  • 原谅我的草率观察。你说的对!他们是反引号。
  • 它们也是编写赋值函数所必需的,例如row.mean&lt;-

标签: r function


【解决方案1】:

打破 Richard 的假设,反引号允许您在名称中使用通常不允许的符号。见:

`add+5` <- function(x) {return(x+5)}

定义了一个函数,但是

add+5 <-  function(x) {return(x+5)}

返回

Error in add + 5 <- function(x) { : object 'add' not found

要引用该函数,您还需要显式使用反引号。

> `add+5`(3)
[1] 8

要查看此函数的代码,只需在不带参数的情况下调用它:

> `add+5`
function(x) {return(x+5)}

另请参阅此评论,该评论处理名称分配中反引号和引号之间的区别:https://stat.ethz.ch/pipermail/r-help/2006-December/121608.html

注意,反引号的用法更为普遍。例如,在数据框中,您可以将列命名为整数(可能来自对整数因子使用 reshape::cast)。

例如:

test = data.frame(a = "a", b = "b")
names(test) <- c(1,2)

要检索这些列,您可以将反引号与 $ 运算符结合使用,例如:

> test$1
Error: unexpected numeric constant in "test$1"

但是

> test$`1`
[1] a
Levels: a

有趣的是,您不能在分配数据框列名称时使用反引号;以下不起作用:

test = data.frame(`1` = "a", `2` = "b")

响应 statechular 的 cmets,这里还有另外两个用例。

在修复功能中

使用% 符号我们可以天真地定义向量xy 之间的点积:

`%.%` <- function(x,y){

    sum(x * y)

}

给了

> c(1,2) %.% c(1,2)
[1] 5

更多信息,请参阅:http://dennisphdblog.wordpress.com/2010/09/16/infix-functions-in-r/

替换函数

这是一个很好的答案,展示了这些是什么:What are Replacement Functions in R?

【讨论】:

  • 感谢亚历克斯!那讲得通。还发现了使用反引号的另外两个优点:(1)允许用户定义中缀函数; (2) 替换函数
  • 谢谢,我已经更新了答案以包含这些案例。
  • 关于名称更有趣的是你不能用反引号分配数字,但是 R 可以... split(1, 1) 但是你可以通过 split(1,1)$@ 使用反引号来访问它们987654341@
  • 确实很有趣!不幸的是,我们在查询split 的底层代码方面没有找到太多帮助。但是,查询reshape::cast 会得到以下信息:` if (any(names(data) == value)) names(data)[names(data) == value]
猜你喜欢
  • 2021-09-09
  • 1970-01-01
  • 2014-02-17
  • 2022-09-30
  • 2018-04-12
  • 2015-06-07
  • 2022-01-13
  • 2011-03-28
  • 2020-06-12
相关资源
最近更新 更多