2017-10-19 23 views
0

Est-il possible d'utiliser la tuyauterie du package dplyr pour effectuer des calculs numériques? Un exemple simple est:Calculs numériques à l'aide des commandes de tuyauterie dplyr

0.15 %>% 3.8416 * (.*(1-.))/(0.03^2) #does not work 
    seq(1,10,1) %>% log(.) %>% .^2  #works 

Se lier pour mieux comprendre comment la tuyauterie fonctionne et quand elle peut et ne peut pas être utilisée. J'apprécie vraiment d'utiliser la fonction de tuyauterie et je veux trouver un moyen de l'utiliser pour ces types de calculs numériques.

Un grand merci

+1

siffleur est à partir du paquet 'magrittr', pas du paquet' dplyr'. Je suggère de jeter un coup d'œil à [le readme] (https://github.com/tidyverse/magrittr). – Gregor

+1

Mais aussi, utilisez un tuyau pour rendre les choses plus claires et plus lisibles. C'est pour ça. Votre premier exemple rend les choses plus difficiles à lire. – Gregor

+0

Merci pour cette clarification sur l'emballage de la tuyauterie et je suis d'accord avec Gregor que la tuyauterie devrait toujours être utilisée pour faciliter la lecture – EDennnis

Répondre

4

Vous avez un problème de priorité d'opérateur. Il essaie de commencer en faisant

0.15 %>% 3.8416 

ce qui n'a pas de sens. Vous devez regrouper tous vos calculs dans un bloc de code

0.15 %>% {3.8416 * (.*(1-.))/(0.03^2)} 
+0

C'est ce que je cherchais. Merci pour la réponse. – EDennnis

2

Tous ces éléments sont équivalents, vous aurez besoin magrittr pour le premier, dplyr suffit pour le 2 suivant:

library(magrittr) 
0.15 %>% multiply_by(subtract(1,.)) %>% multiply_by(3.8416) %>% divide_by(0.03^2) 
0.15 %>% `*`(`-`(1,.)) %>% `*`(3.8416) %>% `/`(0.03^2) 
0.15 %>% {3.8416 * (.*(1-.))/(0.03^2)} 
+1

Merci de démontrer la flexibilité des commandes de tuyauterie pour effectuer une analyse numérique lorsque nous souhaitons passer à travers les données ou la commande de calcul (division, multiplication, etc.) – EDennnis