Подтвердить что ты не робот

Что означают операторы% op%? Например, "% в%"?

Я попытался сделать этот простой поиск, но не смог найти ничего на символе процента (%) в R.

Что означает %in% в следующем коде?

time(x) %in% time(y) где x и y - матрицы.

Как найти справки по %in% и аналогичным функциям, которые следуют за шаблоном %stuff%, так как я не могу найти файл справки?

Связанные вопросы:

4b9b3361

Ответ 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, ответ Ари, ответ Сатиш.


Как создать собственные собственные бинарные операторы?

Это функции и могут быть определены так же, как любая другая функция, с несколькими ограничениями.

  1. Это двоичный оператор, поэтому функция должна принимать ровно два аргумента.
  2. Так как имя нестандартно, оно должно быть написано кавычками или кавычками.

Например, это определяет оператор мощности матрицы.

'%^%' <- 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: Подмножество нескольких значений из столбца Обратитесь этот сайт для примера