2016-07-22 21 views
5

Soruma göre magrittr%>% numaralı paket operatörü operasyon sırasına göre geliyor mu?Boru hattı ile çalışma sırası

şuna bir sorun simmilar vardır:

set.seed(10) 
df <- data.frame(a=rnorm(3),b=rnorm(3),c=rnorm(3)) 
df/rowSums(df) %>% round(.,3) 

Bu aşağıdaki olmayan yuvarlatılmış rakamlar ile sonuçlanır:

  a  b   c 
1 -0.0121966 0.119878 0.8922125 

Ben df/rowSums(df) koymak gerekir yuvarlak rakamlar almak için parantez içinde.

  1. Üstellerinin
  2. Boru
  3. Çarpma ve bölme
  4. :

    I +, -, *, / ve ^ ile ve işlem sırasını bulunan sonuçlardan deneyler aşağıdaki gibidir

  5. Toplama ve çıkarma işlemi

Bu doğru mu yoksa boru operatörü hakkında bilgi sahibi olmama yanlış bir şey mi var?

+2

Unutmayın '' '' '' '' '' '' '' '' '' '' '' 'bir işlev, bir boru içinde' rowSums (df)%>% \ '/ \' (df,.)%>% Yuvarlak (3) 'olacağını düşünüyorum çünkü 'rowSums()' önce alınır, daha sonra '/'. Ya da daha basitçe, ve * magrittr * speak 'divide_by (df, rowSums (df))%>% round (3)' –

+0

'df%>%"/"(rowSums (.))%>% Yuvarlak (3) –

cevap

8

Aradığınız yardım sitesi ?Syntax. (Bu bulmak mümkün olmadığı için kötü hissetmeyin, arama anahtar kelimeler bana yaklaşık altı tahminler aldı.) Burada, tüm operatör öncelik tablosunu alıntı gidiyorum:

aşağıdaki tekli ve ikili operatörler tanımlanır. Öncelik gruplarında en yüksekten en düşüğe doğru listelenen vardır.

‘:: :::’   access variables in a namespace    
    ‘$ @’    component/slot extraction     
    ‘[ [[’    indexing          
    ‘^’    exponentiation (right to left)    
    ‘- +’    unary minus and plus       
    ‘:’    sequence operator        
    ‘%any%’   special operators (including ‘%%’ and ‘%/%’) 
    ‘* /’    multiply, divide        
    ‘+ -’    (binary) add, subtract      
    ‘< > <= >= == !=’ ordering and comparison      
    ‘!’    negation          
    ‘& &&’   and           
    ‘| ||’    or           
    ‘~’    as in formulae        
    ‘-> ->>’   rightwards assignment       
    ‘<- <<-’   assignment (right to left)     
    ‘=’    assignment (right to left)     
    ‘?’    help (unary and binary)      

Yani magrittr 's boru operatörleri, tüm gibi formda %whatever% işletmecileri, gerçekten üs daha öncelik çarpma ve bölme daha büyük ancak daha düşük var ve bu dil spesifikasyonu tarafından garanti edilmektedir.


Şahsen, bu işleçlerdeki değeri göremiyorum. Neden sadece istediğiniz değerlendirme sırasını vardır ve (IMNSHO) daha kolay hem de okumaktır

round(df/rowSums(df), 3) 

yazma?

+0

Evet, borunun güzel ve yararlı olduğu zamanlar var, bu onlardan biri değil. – cory

+0

Bu çok yararlı ve evet, 'yuvarlak (df/rowSums (df), 3)' bu durumda daha iyidir. – athraa

+2

Bu anlamda boru daha sezgiseldir, düşünce sırasını takip eder: satırlara böl ve sonra yuvarlak./* + - sonra gelmeli, imho, bu noktada bir seçenek olmasa da göründüğü gibi. – jtr13

İlgili konular