R: Ce sont des opérateurs comme %en% appelé et comment puis-je en apprendre plus sur eux?
Je sais que les notions de base comme ==
et !=
, ou même la différence (vaguement) entre &
et &&
. Mais des trucs comme %in%
et %%
et certaines choses utilisées dans le cadre de sprintf()
, comme sprintf("%.2f", x)
de choses que j'ai aucune idée à ce sujet.
Le pire de tous, ils sont difficiles à rechercher sur l'Internet parce qu'ils sont des caractères spéciaux et je ne sais pas ce qu'ils sont appelés à...
Vous pouvez les rechercher dans
Vous pouvez essayer de
Il est également possible de définir un infixe
R
avec ?"%in%"
ou ?sprintf
. Lorsque vous avez lu la page d'aide, vous devriez être en mesure de les utiliser ou au moins avoir une certaine idée sur la façon de les rechercher.Vous pouvez essayer de
ls("package:base", pattern = "%")
(en remplacement de "base" avec tout autre forfait) pour voir ces. L'aide de ces fonctions peuvent être invoqués par des "?`%en% de "" c'est à dire lorsque vous souhaitez appeler cette fonction, vous devez l'inclure dans "`" ou des guillemetsIl est également possible de définir un infixe
:=
(par exemple, utilisé dans data.table
). Quelqu'un aurait-il une liste complète de ce que les opérateurs infixes sont possibles? Par exemple, pourquoi est - :=
possible, tout en =:
n'est-ce pas?
OriginalL'auteur vocaloidict | 2014-08-07
Vous devez vous connecter pour publier un commentaire.
Il y a plusieurs choses différentes qui se passe ici avec le symbole de pourcentage:
Opérateurs Binaires
Comme plusieurs l'ont déjà fait remarquer, les choses de la forme
%%
,%in%
,%*%
sont des opérateurs binaires (respectivement modulo, match, et de la matrice de multiplication), tout comme un+
,-
, etc. Ils sont des fonctions qui opèrent sur deux arguments que R reconnaît comme étant spécial en raison de leur nom de la structure (qui commence et se termine avec un%
). Cela vous permet de les utiliser dans le formulaire:au lieu de la plus traditionnelle:
Gardez à l'esprit que les suivantes sont équivalentes:
R seulement reconnaît la norme aussi bien les opérateurs que les
%x%
opérateurs de spécial et vous permet de les utiliser comme traditionnel des opérateurs binaires si vous n'avez pas les citer. Si vous les citer (dans les exemples ci-dessus avec les backticks), vous pouvez les utiliser comme standard de deux argument fonctions.Personnalisé Opérateurs Binaires
La grande différence entre la norme des opérateurs binaires et
%x%
opérateurs est que vous pouvez définir des opérateurs binaires et R reconnaîtra comme spécial et de les traiter comme des opérateurs binaires:Ici, nous avons défini un opérateur binaire de la version de l'échantillon en fonction
"%" ( % ), Un jeton en fonction spéciale
Le sens de
"%"
en fonction commesprintf
ouformat
est complètement différent et n'a rien à faire avec des opérateurs binaires. L'important à retenir est que, dans ces fonctions, le%
personnage fait partie d'une chaîne de caractères entre guillemets, et non pas un symbole standard sur la ligne de commande (c'est à dire"%"
et%
sont très différents). Dans le contexte desprintf
, à l'intérieur d'une chaîne,"%"
est un caractère spécial utilisé pour reconnaître que les caractères suivants ont une signification particulière et ne doit pas être interprété comme du texte normal. Par exemple, dans:"%.2f"
signifie un nombre à virgule flottante (f
) pour être affichées avec deux décimales (.2
). Remarquez comment le"I'm a number: "
morceau est interprété littéralement. L'utilisation de"%"
permetsprintf
utilisateurs de mélanger littérale du texte avec des instructions spéciales sur la façon de représenter l'autresprintf
arguments.Cela a été très pédagogique!
Je suis venu ici chercher de l'aide avec un tutoriel, je suis en train d'écrire, et cela m'a aidé avec un projet que je suis en train de travailler sur un contrat. J'ai essayé de trouver un chemin court à écrire
x < value
, mais ont-il ignorerNA
valeurs.'%less.than%' <- function(x, val) {is.na(x) | x < val}
fait le truc parfaitement-par exemple7 %less.than% 10
-- merci!!!!!!OriginalL'auteur BrodieG
La R De Définition De Langue, section 3.1.4 se réfère à eux comme "spécial opérateurs binaires". Une des façons dont ils sont spéciaux est que les utilisateurs peuvent définir de nouveaux opérateurs binaires à l'aide de la
%x%
syntaxe (oùx
est n'importe quel nom valide).La Écrire vos propres fonctions section de Une Introduction à R, se réfère à eux comme Opérateurs Binaires (qui est un peu déroutant parce que
+
est également un opérateur binaire):+
est également un opérateur binaire.oui, mais les utilisateurs ne peuvent pas définir de opérateurs binaires en dehors de l'aide de l'
%...%
syntaxe (court de re-compilation de R à partir de la source).Je ne suis pas certain que cela soit pertinent. La question était de savoir s'ils avaient un nom (= ce qui les différencie des autres opérateurs), et ce n'est pas ça.
Je ne vois pas la distinction. "Ce sont des opérateurs comme %% nom?" On les appelle des opérateurs binaires, tout comme
+
; et ils se trouvent être la seule manière dont les utilisateurs peuvent définir des opérateurs binaires.%in%
et%*%
existent parce quein
est un mot réservé et*
fait élément par élément de multiplication. Je n'ai pas lu la question "les opérateurs binaires comme %% ont un nom spécial?", auquel cas la réponse est "non".Pour être juste, l'OP n'a pas demandé un nom spécifiquement à la recherche pour. Ils ont demandé comment apprendre à leur sujet et a déclaré qu'ils étaient difficiles à trouver. Je peux voir comment vous vous en déduit que, bien que. Aussi, une recherche de R opérateurs binaires révèle le "R de Définition de Langage" appels "spéciaux des opérateurs binaires", que j'ai ajouté à ma réponse. Merci pour les invites de la clarification.
OriginalL'auteur Joshua Ulrich
Ils n'ont pas un nom spécial pour autant que je sais. Ils sont décrits dans R de l'opérateur de la syntaxe et de la priorité.
La
%anything%
des opérateurs fonctions normales, qui peut être définie par vous-même. Vous avez besoin de mettre le nom de l'opérateur dans les backticks (`…`
), si: c'est comment R traite des noms spéciaux.La
sprintf
chaînes de format sont entièrement indépendants, ils ne sont pas les opérateurs à tous. Au lieu de cela, ils sont juste la classique C-style chaînes de format.Les guillemets sont conceptuellement à l'envers: ils ont juste désigner les chaînes. R permet tout simplement de (tous) les noms de fonction pour être mis dans les chaînes (probablement pour des raisons historiques, il n'a certainement pas aucun sens de nos jours), et utilise
match.fun
en interne pour récupérer de la fonction réelle donnée une chaîne de caractères avec le nom de la fonction. Backticks, d'autre part, sont tout simplement R syntaxique mécanisme pour permettre sinon des caractères non valides dans les noms de variable. Cela fonctionne pour les fonctions, mais aussi pour les autres variables (l'essayer: `b` = 42).J'ai toujours été sous l'impression qu'ils sont appelés "opérateurs infixes" comme par cran.r-project.org/doc/manuals/r-release/...
D'autres opérateurs sont également des opérateurs infixes. “infixe” signifie juste que c'est entre les deux opérandes, par opposition à un préfixe ou un suffixe opérateurs (avec
!
étant un préfixe de l'opérateur, et l'indicex[y]
étant généralement considérée comme postfix).n'est-ce pas
[
fait infix? Les arguments entre dansx[y]
sontx
ety
, donc[
est en fait entrex
ety
, avec]
simplement pour des raisons de syntaxe. Je ne sais pas de postfix opérateur dans R.OriginalL'auteur Konrad Rudolph
Le fichier d'aide, et le entrée générale, est en effet un bon point de départ:
?'%in%'
Par exemple, vous pouvez voir comment l'opérateur
'%in%'
est défini:"%in%" <- function(x, table) match(x, table, nomatch = 0) > 0
Vous pouvez même créer votre propre des opérateurs:
'%ni%' <- Negate('%in%')
OriginalL'auteur Rico