web-dev-qa-db-fra.com

Que signifient les opérateurs% op%? Par exemple "% en%"?

J'ai essayé de faire cette recherche simple mais je n'ai rien trouvé sur le symbole de pourcentage (%) Dans R.

Que signifie %in% Dans le code suivant?

time(x) %in% time(y)x et y sont des matrices.

Comment puis-je rechercher de l'aide sur %in% Et des fonctions similaires qui suivent le modèle %stuff%, Car je ne trouve pas le fichier d'aide?

Questions connexes:

38

Mettez des guillemets autour pour trouver la page d'aide. L'un ou l'autre de ces travaux

> help("%in%")
> ?"%in%"

Une fois sur la page d'aide, vous verrez que

"% En%" est actuellement défini comme

‘"% In% "<- fonction (x, table) correspond (x, table, nomatch = 0)> 0’


Puisque time est un générique, je ne sais pas ce que time(X2) renvoie sans savoir ce que X2 Est. Mais, %in% Vous indique quels éléments du côté gauche se trouvent également du côté droit.

> c(1:5) %in% c(3:8)
[1] FALSE FALSE  TRUE  TRUE  TRUE

Voir aussi, intersect

> intersect(c(1:5), c(3:8))
[1] 3 4 5
26
GSee

Je ne pensais pas que les réponses de GSee ou Sathish allaient assez loin parce que "%" does ont un sens en soi et pas seulement dans le contexte du %in% opérateur. C'est le mécanisme pour définir de nouveaux opérateurs infixes par les utilisateurs. C'est une question beaucoup plus générale que les vertus du %in% opérateur infixe ou son ancêtre préfixe plus général match. Cela pourrait être aussi simple que de créer un (s) opérateur um

 `%s%` <- function(x,y) x + y

Ou cela pourrait être plus intéressant, disons faire un second opérateur dérivé:

 `%DD%` <- function(expr, nam="x") { D(D( bquote(.(expr)), nam), nam) }
 expression(x^4) %DD% "x"
 # 4 * (3 * x^2)

Le %- Le caractère a également de l'importance dans l'analyse des fonctions de format Date, date-heure et de type C comme strptime, formatC et sprintf.

Depuis que cela a été écrit à l'origine, nous avons vu l'émergence du package magrittr avec l'élaboration dplyr qui démontre une autre utilisation de %- opérateurs flanqués.

La réponse la plus générale est donc que % les symboles sont traités spécialement par l'analyseur R. Étant donné que l'analyseur est utilisé pour traiter les expressions de plotmath, vous verrez également de nombreuses options d'annotations graphiques dans ?plotmath page d'aide.

50
42-

%op% désigne un infixeopérateur binaire. Il existe plusieurs opérateurs intégrés utilisant %, et vous pouvez également créer le vôtre.

(Un célibataire ou Individual % signe n'est pas un mot clé dans R. Vous pouvez voir une liste de mots clés sur le ?Reserved page d'aide.)


Comment obtenir de l'aide sur les opérateurs binaires?

Comme pour tout ce qui n'est pas un nom de variable standard, vous devez mettre le terme entre guillemets ou guillemets.

?"%in%"
?`%in%`    

Crédit: réponse de GSee .


Qu'est-ce que %in% faire?

Comme décrit sur le ?`%in%` page d'aide (qui est en fait la ?match page d'aide depuis %in% n'est vraiment qu'une version infixe de match.),

[%in%] renvoie un vecteur logique indiquant s'il existe une correspondance ou non pour son opérande gauche

Il est le plus souvent utilisé avec des variables catégorielles, bien qu'il puisse également être utilisé avec des nombres.

c("a", "A") %in% letters
## [1]  TRUE FALSE

1:4 %in% c(2, 3, 5, 7, 11)
## [1] FALSE  TRUE  TRUE FALSE

Crédit: réponse de GSee , réponse d'Ari , réponse de Sathish .


Comment créer mes propres opérateurs binaires d'infixe?

Ce sont des fonctions, et peuvent être définies de la même manière que toute autre fonction, avec quelques restrictions.

  1. C'est un opérateur binaire, donc la fonction doit prendre exactement deux arguments.
  2. Comme le nom n'est pas standard, il doit être écrit avec des guillemets ou des guillemets.

Par exemple, cela définit un opérateur de puissance matriciel.

`%^%` <- function(x, y) matrixcalc::matrix.power(x, y)

matrix(1:4, 2) %^% 3

Crédit: réponse de BondedDust , réponse d'Ari .


Quels autres % les opérateurs sont là?

Dans base R:

%/% et %% effectuer division entière et division modulaire respectivement, et sont décrits sur ?Arithmetic page d'aide.

%o% donne le produit externe des tableaux.

%*% effectue multiplication matricielle .

%x% exécute le produit Kronecker des tableaux.

Dans ggplot2 :

%+% remplace la trame de données dans un ggplot.

%+replace% modifie les éléments de thème dans un ggplot.

%inside% (interne) vérifie les valeurs d'une plage.

%||% (interne) fournit une valeur par défaut en cas de valeurs NULL. Cette fonction apparaît également en interne dans devtools, reshape2, roxygen2 et knitr. (Dans knitr, cela s'appelle %n%.)

Dans magrittr :

%>% redirige le côté gauche vers une expression du côté droit.

%<>% redirige le côté gauche vers une expression du côté droit, puis attribue le résultat à l'objet de gauche.

%T>% redirige le côté gauche dans une expression du côté droit, qu'il utilise uniquement pour ses effets secondaires, renvoyant le côté gauche.

%,% construit une séquence fonctionnelle.

%$% expose les colonnes d'un data.frame ou les membres d'une liste.

Dans data.table:

%between% vérifie les valeurs dans une plage.

%chin% est comme %in%, optimisé pour les vecteurs de caractères.

%like% vérifie les correspondances d'expressions régulières.

Dans Hmisc:

%nin% renvoie l'opposé de %in%.

Dans devtools :

%:::% (interne) obtient une variable d'un espace de noms passé sous forme de chaîne.

Dans sp:

%over% effectue une jointure spatiale (par exemple, quel polygone correspond à certains points?)

Dans rébus :

%R% concatène les éléments d'un objet regex.


Plus généralement, vous pouvez retrouver tous les opérateurs dans tous les packages installés sur votre machine en utilisant:

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
)
24
Richie Cotton

Plus généralement, %foo% est la syntaxe d'un opérateur binaire. Les opérateurs binaires dans R ne sont en réalité que des fonctions déguisées, et prennent deux arguments (celui d'avant et celui après l'opérateur deviennent les deux premiers arguments de la fonction).

Par exemple:

> `%in%`(1:5,4:6)
[1] FALSE FALSE FALSE  TRUE  TRUE

Tandis que %in% est défini dans la base R, vous pouvez également définir votre propre fonction binaire:

`%hi%` <- function(x,y) cat(x,y,"\n")
> "oh" %hi% "my"
oh my 
21
Ari B. Friedman

%in% est un opérateur utilisé pour rechercher et sous-définir plusieurs occurrences du même nom ou de la même valeur dans une matrice ou un bloc de données.

Par exemple 1: sous-ensemble avec le même nom

set.seed(133)
x <- runif(5)
names(x) <- letters[1:5]
x[c("a", "d")]
#  a         d 
#  0.5360112 0.4231022

Vous changez maintenant le nom de "d" en "a"

 names(x)[4] <- "a"

Si vous essayez d'extraire les noms similaires et ses valeurs à l'aide de l'indice précédent, cela ne fonctionnera pas. Remarquez le résultat, il n'a pas les éléments de [1] et [4].

x[c("a", "a")]

#        a         a 
#    0.5360112 0.5360112 

Ainsi, vous pouvez extraire les deux "a" à partir d'une position différente dans une variable en utilisant %in% opérateur binaire.

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 

Exemple 2: Sous-ensemble de plusieurs valeurs d'une colonne Reportez-vous ce site pour un exemple

2
Sathish