【问题标题】:Treat arithmetic operators as functions将算术运算符视为函数
【发布时间】:2015-10-26 15:22:16
【问题描述】:

我读过 R 中的一切都是函数。所以我想知道“+”是否也是一个函数 如果我们能写出这样的东西:

xx <- c(1,2,3)
yy <- c(1,2,3,4,5,6)

# zz is the sum of the two lengths
zz <- +(if(exists("xx")) length(xx), if(exists("yy")) length(yy))

【问题讨论】:

  • 只需使用sum 而不是+
  • + 确实是一个你只需要添加反引号的函数。
  • 但是,您使用 if(exists()) 的构造不像您在 + 函数调用中所期望的那样工作。尝试如果其中一个变量不存在会发生什么。然后你基本上做类似1 + NULL的事情。
  • @罗纳德:你是对的。我通过将“if”更改为“ifelse”来修复它
  • 另见here

标签: r function syntax


【解决方案1】:

是的,您可以:

xx <- c(1,2,3)
yy <- c(1,2,3,4,5,6)

# zz is the sum of the two lengths
zz <- `+`(if(exists("xx")) length(xx), if(exists("yy")) length(yy))
#[1] 9

要调用没有语法有效名称的对象(例如函数+,如果您执行1 + 2 之类的操作会隐式调用),您需要将名称括在反引号(`)或引号(“或')。

另请参阅R Language Definition 的第 3.1.4 节:

除了语法之外,应用运算符和调用函数没有区别。事实上,x + y 可以等价地写成 `+`(x, y)。请注意,由于“+”是一个非标准函数名,因此需要用引号引起来。

在您的代码中,您会收到错误:

Error: unexpected ',' in "zz <- +(if(exists("xx")) length(xx),"

这是因为您没有调用(二元)函数"+",而是一元运算符+,它不需要函数参数,因此将括号解释为“算术”运算符。这些之间不允许使用逗号。

【讨论】:

  • 您也可以使用单引号或双引号,"+"(1, 1)'+'(1, 1) 都可以与反引号解决方案一样工作。
  • 对你最后一句话的狡辩:运营商没有“内部”。规则是在分隔函数参数时,任何地方都不允许使用逗号 except
猜你喜欢
  • 2015-02-06
  • 2023-03-03
  • 2019-03-24
  • 2022-01-07
  • 2016-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多