百分号R

yua*_*iu1 8 r

我最近阅读了一个名为'pathifier'的R包的一些源代码.在源代码中,它使用百分号.

if (0 %in% xs) {
si <- NULL
cat(file = logfile, append = TRUE, "skipping pathway ", 
i, " (0 in xs)\n")
}
Run Code Online (Sandbox Code Playgroud)

%in%这个功能意味着什么?它只是意味着常规'in'吗?

nog*_*pes 16

in保留字只能使用for循环.该%in%功能是不同的.如文档中所述?"%in%",定义为:

"%in%" <- function(x, table) match(x, table, nomatch = 0) > 0
Run Code Online (Sandbox Code Playgroud)

所以,它本质上是match.在英语中,x %in% y返回logical与x相同长度的向量,TRUE每次相应的元素x至少存在一次y.

%围绕它的原因是将其标记为"中缀"运算符.(我不知道这是否是确切的术语.)

  • 我不明白"特殊"一词所显示的阻力.R Reference中的另一个位置在运算符列表中:`%x%特殊二进制运算符,x可以替换为任何有效名称`. (2认同)

42-*_*42- 9

useR具有创建新的中缀函数的能力,并且调度机制将识别名称开头和结尾的函数%.假设您想创建一个复制值n次的中缀运算符:

 `%rep%` <- function(x,y) rep(x,y)
  10 %rep% 5
  # [1] 10 10 10 10 10
Run Code Online (Sandbox Code Playgroud)

另一个这样做的例子可以在?match的帮助页面上找到,它讨论%in%并演示了如何创建一个中%w/o%缀操作符.R语言参考中描述这一点的部分是10.3.4:"特殊运算符".