提问人:heavy rocker dude 提问时间:10/4/2012 最后编辑:Jaapheavy rocker dude 更新时间:1/1/2021 访问量:50602
%op% 运算符是什么意思?例如,“%in%”?
What do the %op% operators in mean? For example "%in%"?
问:
我尝试进行这个简单的搜索,但在 R 中的百分比 () 符号上找不到任何内容。%
%in%
在以下代码中是什么意思?
time(x) %in% time(y)
其中 和 是矩阵。x
y
如何查找有关 %in%
和遵循该模式的类似函数的帮助,因为我找不到帮助文件?%stuff%
相关问题:
答:
在它周围加上引号以找到帮助页面。这些工作中的任何一个
> help("%in%")
> ?"%in%"
进入帮助页面后,您会看到
'%in%' 当前定义为
'“%in%” <- 函数(x, 表) match(x, table, nomatch = 0) > 0'
由于是泛型,我不知道什么返回,不知道是什么。但是,告诉您左侧的哪些项目也在右侧。time
time(X2)
X2
%in%
> c(1:5) %in% c(3:8)
[1] FALSE FALSE TRUE TRUE TRUE
另请参阅,intersect
> intersect(c(1:5), c(3:8))
[1] 3 4 5
评论
%in%
是一个运算符,用于在矩阵或数据框中查找和子集相同名称或值的多个匹配项。
示例 1:同名子集
set.seed(133)
x <- runif(5)
names(x) <- letters[1:5]
x[c("a", "d")]
# a d
# 0.5360112 0.4231022
现在,将“d”的名称更改为“a”
names(x)[4] <- "a"
如果尝试使用上一个下标提取相似的名称及其值,它将不起作用。请注意结果,它没有 [1] 和 [4] 的元素。
x[c("a", "a")]
# a a
# 0.5360112 0.5360112
因此,您可以使用二元运算符从变量中的不同位置提取两个“a”。%in%
names(x) %in% "a"
# [1] TRUE FALSE FALSE TRUE FALSE
#assign it to a variable called "vec"
vec <- names(x) %in% "a"
#extract the values of two "a"s
x[vec]
# a a
# 0.5360112 0.4231022
示例 2:从列中子集多个值 有关示例,请参阅此站点
更一般地说,是二进制运算符的语法。R 中的二进制运算符实际上只是伪装的函数,并且接受两个参数(运算符之前的一个和运算符之后的一个成为函数的前两个参数)。%foo%
例如:
> `%in%`(1:5,4:6)
[1] FALSE FALSE FALSE TRUE TRUE
虽然在 base R 中定义,但您也可以定义自己的二进制函数:%in%
`%hi%` <- function(x,y) cat(x,y,"\n")
> "oh" %hi% "my"
oh my
评论
我不认为 GSee 或 Sathish 的答案走得足够远,因为“%”本身确实有意义,而不仅仅是在运算符的上下文中。它是用户定义新中缀运算符的机制。这是一个比中缀运算符或其更通用的前缀祖先的优点更普遍的问题。它可以像制作一个成对的“s”(um)运算符一样简单:%in%
%in%
match
`%s%` <- function(x,y) x + y
或者它可能更有趣,比如做一个二阶导数算子:
`%DD%` <- function(expr, nam="x") { D(D( bquote(.(expr)), nam), nam) }
expression(x^4) %DD% "x"
# 4 * (3 * x^2)
-character 在解析 Date、date-time 和 C 型格式函数(如 和 )时也很重要。%
strptime
formatC
sprintf
自从最初编写以来,我们已经看到了该包的出现,其详细说明演示了 -flanked 运算符的另一种用途。magrittr
dplyr
%
因此,最一般的答案是符号由 R 解析器专门处理。由于解析器用于处理 plotmath 表达式,因此您还将在帮助页面上看到图形注释的大量选项。%
?plotmath
评论
%op%
表示中缀二进制运算符。有几个内置运算符使用 ,您也可以创建自己的运算符。%
(单个符号不是 R 中的关键字。您可以在 ?保留
帮助页面。%
如何获得有关二元运算符的帮助?
与任何不是标准变量名称的东西一样,您必须将该术语括在引号或反引号中。
?"%in%"
?`%in%`
图片来源:GSee的回答。
%in%
有什么作用?
如帮助页面(实际上是帮助页面,因为实际上只是 的中缀版本)中所述,?`%in%`
?match
%in%
match
[
%in%
] 返回一个逻辑向量,指示其左操作数是否匹配
它最常用于分类变量,尽管它也可以用于数字。
c("a", "A") %in% letters
## [1] TRUE FALSE
1:4 %in% c(2, 3, 5, 7, 11)
## [1] FALSE TRUE TRUE FALSE
图片来源:GSee的回答,Ari的回答,Sathish的回答。
如何创建自己的中缀二进制运算符?
这些是函数,可以像定义任何其他函数一样,但有一些限制。
- 它是一个二进制操作器,因此该函数必须正好接受两个参数。
- 由于名称是非标准的,因此必须用引号或反引号书写。
例如,这定义了一个矩阵幂运算符。
`%^%` <- function(x, y) matrixcalc::matrix.power(x, y)
matrix(1:4, 2) %^% 3
图片来源:BondedDust 的回答,Ari 的回答。
还有哪些其他 %
运算符?
在基础 R 中:
%/%
并分别进行整数除法和模除法,并在 ?算术
帮助页面。%%
%x%
执行数组的 Kronecker 乘积。
在 ggplot2 中:
%+%
替换 ggplot 中的数据框。
%+replace%
修改 ggplot 中的主题元素。
%inside%
(内部) 检查范围内的值。
%||%
(internal) 在值的情况下提供默认值。此函数也出现在 devtools、reshape2、roxygen2 和 knitr 内部。(在 knitr 中,它被称为 。NULL
%n%
在 magrittr 中:
%>%
将左侧的表达式传递到右侧的表达式中。
%<>%
将左侧通过管道传递到右侧的表达式中,然后将结果分配回左侧对象。
%T>%
将左侧输送到右侧的表达式中,该表达式仅用于其副作用,返回左侧。
%,%
构建功能序列。
%$%
公开 Data.Frame 的列或列表的成员。
在 data.table 中:
%between%
检查某个范围内的值。
%chin%
类似于 ,针对字符向量进行了优化。%in%
%like%
检查正则表达式匹配项。
在 Hmisc 中:
%nin%
返回 的反义词。%in%
在 devtools 中:
%:::%
(internal) 从作为字符串传递的命名空间中获取变量。
在 sp 中:
%over%
执行空间连接(例如,哪个多边形对应于某些点?
在 rebus 中:
%R%
连接对象的元素。regex
更一般地说,您可以使用以下命令在计算机上安装的所有软件包中找到所有运算符:
library(magrittr)
ip <- installed.packages() %>% rownames
(ops <- setNames(ip, ip) %>%
lapply(
function(pkg)
{
rdx_file <- system.file("R", paste0(pkg, ".rdx"), package = pkg)
if(file.exists(rdx_file))
{
rdx <- readRDS(rdx_file)
fn_names <- names(rdx$variables)
fn_names[grepl("^%", fn_names)]
}
}
) %>%
unlist
)
评论
下一个:如何拆分数据框?
评论