Что означают операторы% op%? Например, "% в%"?
Я попытался сделать этот простой поиск, но не смог найти ничего на символе процента (%
) в R.
Что означает %in%
в следующем коде?
time(x) %in% time(y)
где x
и y
- матрицы.
Как найти справки по %in%
и аналогичным функциям, которые следуют за шаблоном %stuff%
, так как я не могу найти файл справки?
Связанные вопросы:
Ответы
Ответ 1
Поместите кавычки вокруг него, чтобы найти страницу справки. Любая из этих работ
> help("%in%")
> ?"%in%"
Как только вы перейдете на страницу справки, вы увидите, что
'% in% в настоящее время определяется как
' "% in%" < - function (x, table) 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
Ответ 2
Я не думал, что ответы GSee или Sathish прошли достаточно далеко, потому что "%" имеет смысл само по себе, а не только в контексте оператора %in%
. Это механизм определения пользователями новых инфиксных операторов. Это гораздо более общая проблема, чем достоинства инфиксного оператора %in%
или его более общего префикса precestor match
. Это может быть так же просто, как сделать оператор um
`%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)
Символ %
также имеет значение при анализе функций формата Date, date-time и C-типа, таких как strptime
, formatC
и sprintf
.
Поскольку это было изначально написано, мы увидели появление пакета magrittr
с разработкой dplyr
, которая демонстрирует еще одно использование для %
-ограниченных операторов.
Таким образом, наиболее общий ответ заключается в том, что символы %
обрабатываются специально парсером R. Поскольку синтаксический анализатор используется для обработки выражений plotmath, вы также увидите обширные варианты графических аннотаций на странице справки ?plotmath
.
Ответ 3
В общем случае %foo%
является синтаксисом для двоичного оператора. Двоичные операторы в R действительно являются скрытыми функциями и принимают два аргумента (один до и один после того, как оператор становится первыми двумя аргументами функции).
Например:
> `%in%`(1:5,4:6)
[1] FALSE FALSE FALSE TRUE TRUE
Пока %in%
определяется в базе R, вы также можете определить свою собственную двоичную функцию:
`%hi%` <- function(x,y) cat(x,y,"\n")
> "oh" %hi% "my"
oh my
Ответ 4
%op%
обозначает двоичный оператор infix. Существует несколько встроенных операторов, использующих %
, и вы также можете создавать свои собственные.
(Знак одного %
не является ключевым словом в R. Вы можете увидеть список ключевых слов на странице " ?Reserved
помощь".)
Как получить помощь по бинарным операторам?
Как и все, что не является стандартным именем переменной, вы должны заключить этот термин в кавычки или обратные кавычки.
?"%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, ответ Ари, ответ Сатиш.
Как создать собственные собственные бинарные операторы?
Это функции и могут быть определены так же, как любая другая функция, с несколькими ограничениями.
- Это двоичный оператор, поэтому функция должна принимать ровно два аргумента.
- Так как имя нестандартно, оно должно быть написано кавычками или кавычками.
Например, это определяет оператор мощности матрицы.
'%^%' <- function(x, y) matrixcalc::matrix.power(x, y)
matrix(1:4, 2) %^% 3
Кредит: BondedDust ответ, ответ Ари.
Какие еще %
операторов существуют?
В базе R:
%/%
и %%
выполняют целочисленное деление и модульное деление соответственно и описаны на странице справки ?Arithmetic
.
%o%
дает внешний продукт массивов.
%*%
выполняет матричное умножение.
%x%
выполняет произведение Kronecker массивов.
В ggplot2 :
%+%
заменяет фрейм данных в ggplot.
%+replace%
изменяет элементы темы в ggplot.
%inside%
(внутренний) проверяет значения в диапазоне.
%||%
(внутренний) предоставляет значение по умолчанию в случае значений NULL
. Эта функция также появляется внутри в devtools, reshape2, roxygen2 и knitr. (В knitr это называется %n%
.)
В magrittr :
%>%
переводит левую часть в выражение с правой стороны.
%<>%
переводит левую сторону в выражение с правой стороны, а затем возвращает результат обратно в объект левой стороны.
%T>%
переводит левую часть в выражение с правой стороны, которое оно использует только для своих побочных эффектов, возвращая левую сторону.
%,%
строит функциональную последовательность.
%$%
предоставляет столбцы файла data.frame или членов списка.
В таблице данных:
%between%
проверяет значения в диапазоне.
%chin%
%in%
, оптимизированному для символьных векторов.
%like%
проверяет соответствие регулярных выражений.
В Hmisc:
%nin%
возвращает противоположность %in%
.
В devtools:
%:%
(internal) получает переменную из пространства имен, переданного в виде строки.
В sp:
%over%
выполняет пространственное соединение (например, какой полигон соответствует некоторым точкам?)
В ребусе:
%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
)
Ответ 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: Подмножество нескольких значений из столбца
Обратитесь этот сайт для примера