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参数的特殊指令混合.
在R语言定义,节3.1.4指他们是“特殊的二进制运算符”。他们的特殊方式之一是用户可以使用%x%语法(其中x任何有效名称)定义新的二进制运算符。
R简介的 “ 编写您自己的函数”部分将其称为二进制运算符(这有点令人困惑,因为它也是二进制运算符):+
10.2定义新的二进制运算符
我们是否给
bslash()函数指定了不同的名称,即形式之一%any%
它本可以用作表达式中的二进制运算符,而不是函数形式。例如,假设我们选择!对于内部角色。函数定义将开始为
>“%!%” <-函数(X,y){...}
(请注意使用引号。)然后,该函数可以用作X%!%y。(反斜杠符号本身并不是一个方便的选择,因为在这种情况下它会带来特殊的问题。)
矩阵乘法运算符%*%和外部乘积矩阵运算符%o%是以此方式定义的二进制运算符的其他示例。