2013-12-12 2 views
7

Недавно я прочитал некоторый исходный код для R-пакета, называемого «pathifier». В исходном коде используется знак процента.Знак процента в R

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

В чем заключается %in%? Означает ли это просто регулярное «в»?

ответ

14

in зарезервированное слово может использоваться только в for. Функция %in% отличается. Как отмечается в документации на ?"%in%", определяется как:

"%in%" <- function(x, table) match(x, table, nomatch = 0) > 0 

Таким образом, это, по сути match. На английском языке x %in% y возвращает вектор logical той же длины, что и x, с TRUE каждый раз, когда соответствующий элемент x существует по меньшей мере один раз в y.

Причина, по которой существует %, состоит в том, чтобы пометить ее как «инфикс» оператора. (Я не знаю, является ли это точный термин.)

+1

Правильная терминология R (не выдерживающая несколько странного положения Тайлера) - это «специальный оператор». –

+0

@DWin [раздел в документах] (http://cran.r-project.org/doc/manuals/r-release/R-lang.html#Special-operators) действительно называет их «специальными операторами», но отмечает, что специальные операторы используются для определения «инфиксных операторов». Возможно, термин «специальный оператор» относится к «%», а термин «инфиксный оператор» относится к оператору, определенному «специальным оператором». Но, возможно, нет. – nograpes

+2

Я не понимаю сопротивления, которое отображается на термин «специальный». Другое место в R Reference находится в списке операторов: '% x% \t Специальные двоичные операторы, x могут быть заменены любым допустимым именем'. –

8

Использование R дает возможность создавать новые функции инфикса, а механизм отправки распознает функции, имена которых начинаются и заканчиваются %. Скажи, что ты хотел сделать инфиксный оператор, который реплицируется на значение п число раз:

`%rep%` <- function(x,y) rep(x,y) 
    10 %rep% 5 
    # [1] 10 10 10 10 10 

Другой пример выполнения таких можно найти на странице справки матча, который обсуждает %in%, а также демонстрирует, как сделать? %w/o% Оператор infix. Раздел в справочнике по языку R, который описывает это, - 10.3.4: «Специальные операторы».

Смежные вопросы