R:什么是%in in%的运算符,我怎样才能了解它们?

voc*_*ict 18 symbols r operators special-characters

我知道像的基本知识==!=,甚至差(模糊)之间&&&.但是喜欢的东西%in%以及%%在上下文中使用的一些东西sprintf(),比如sprintf("%.2f", x)我不知道的东西.

最糟糕的是,他们很难在互联网上搜索,因为他们是特殊角色,我不知道他们被称为什么......

Bro*_*ieG 36

这里有几个不同的东西,百分比符号:

二元运算符

正如一些已经指出的,形式的东西%%,%in%,%*%是二元操作符(分别为模,匹配和矩阵乘法),就像一个+,-等他们上的是R可以识别为特殊,由于两个参数操作功能他们的名字结构(以a开头和结尾%).这允许您在表单中使用它们:

Argument1 %fun_name% Argument2
Run Code Online (Sandbox Code Playgroud)

而不是更传统的:

fun_name(Argument1, Argument2)
Run Code Online (Sandbox Code Playgroud)

请记住以下内容是等效的:

10 %% 2 == `%%`(10, 2)
"hello" %in% c("hello", "world") == `%in%`("hello", c("hello", "world"))
10 + 2 == `+`(10, 2)
Run Code Online (Sandbox Code Playgroud)

R只是将标准运算符和运算符识别%x%为特殊运算符,如果不引用它们,则允许将它们用作传统的二元运算符.如果引用它们(在上面的示例中使用反引号),则可以将它们用作标准的两个参数函数.

自定义二元运算符

标准二元运算符和%x%运算符之间的最大区别在于您可以定义自定义二元运算符,R会将它们识别为特殊运算符并将它们视为二元运算符:

`%samp%` <- function(e1, e2) sample(e1, e2)
1:10 %samp% 2
# [1] 1 9
Run Code Online (Sandbox Code Playgroud)

这里我们定义了样本函数的二元运算符版本

"%"(百分比)作为特殊功能中的标记

"%"函数中的含义sprintf或者format完全不同,与二元运算符无关.需要注意的关键问题是,在这些功能的%字符是一个引号的字符串的一部分,并在命令行上没有一个标准的符号(即"%"%有很大的不同).在sprintf字符串内部,"%"是一个特殊字符,用于识别后续字符具有特殊含义,不应解释为常规文本.例如,在:

sprintf("I'm a number: %.2f", runif(3))
# [1] "I'm a number: 0.96" "I'm a number: 0.74" "I'm a number: 0.99"
Run Code Online (Sandbox Code Playgroud)

"%.2f"表示f要显示的带有两位小数(.2)的浮点数().注意这"I'm a number: "件作品是如何按字面解释的.使用"%"允许sprintf用户将文字文本与关于如何表示其他sprintf参数的特殊指令混合.

  • 我来到这里寻找我正在编写的教程的帮助,而这帮助了我正在为合同工作的项目.我试图找到一个写'x <value`的简短方法,但忽略了`NA`值.`'%less.than%'< - function(x,val){is.na(x)| x <val}`完美地完成了这个技巧 - 例如`7%减去.%10% - 谢谢!!! (3认同)

Jos*_*ich 5

R语言定义,节3.1.4指他们是“特殊的二进制运算符”。他们的特殊方式之一是用户可以使用%x%语法(其中x任何有效名称)定义新的二进制运算符。

R简介的编写您自己的函数”部分将其称为二进制运算符(这有点令人困惑,因为它也是二进制运算符):+

10.2定义新的二进制运算符

我们是否给bslash()函数指定了不同的名称,即形式之一

%any%

它本可以用作表达式中的二进制运算符,而不是函数形式。例如,假设我们选择!对于内部角色。函数定义将开始为

>“%!%” <-函数(X,y){...}

(请注意使用引号。)然后,该函数可以用作X%!%y。(反斜杠符号本身并不是一个方便的选择,因为在这种情况下它会带来特殊的问题。)

矩阵乘法运算符%*%和外部乘积矩阵运算符%o%是以此方式定义的二进制运算符的其他示例。

  • 公平地说,OP没有要求专门搜索的名称。他们询问如何了解他们,并说他们很难寻找。我可以看到您是如何推断的。另外,搜索[R二进制运算符](https://www.google.com/search?q=R+binary+operators)会发现“ R语言定义”称它们为“特殊二进制运算符”,我已经添加了我的回答。感谢您的澄清。 (2认同)