Как правильно использовать трубу? - PullRequest
0 голосов
/ 28 января 2020

Слышал так много о чудесах труб в R, что я решил, что настало время научиться их использовать. Я хочу сделать операцию над таблицей, затем добавить столбец. Он работает как отдельные строки, но не когда я пытаюсь использовать канал. Может кто-нибудь объяснить мне, что не так с тем, как я использую трубу?

modtable <- table - mean(table$blank[1:3]) %>%
    add_column(n=1)

Спасибо!

Вышеприведенное возвращает ошибку:

Error in if (nrow(df) != nrow(.data)) { : argument is of length zero

1 Ответ

3 голосов
/ 28 января 2020

Мы можем заключить его в {}, чтобы оценить его как блок кода

{table - mean(table$blank[1:3]) }%>%
       add_column(n=1)

, поскольку порядок или приоритет этих операторов (%>%) ниже, чем +, -, как показано в ?Syntax

#:: ::: 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

В тидиверсе вместо этого

library(dplyr)
table %>%
     mutate_all(~ . - mean(head(blank, 3))) %>%
     add_column(n = 1)

Это можно воспроизвести с помощью

data(mtcars)
head(mtcars) - mean(mtcars$mpg[1:3]) %>% 
  add_column(n = 1)

Ошибка в if (nrow (df)! = Nrow (.data)) {: аргумент имеет нулевую длину

, если мы создаем блок,

{head(mtcars) - mean(mtcars$mpg[1:3])} %>% 
     add_column(n = 1)
#                   mpg   cyl  disp    hp   drat      wt  qsec    vs    am  gear  carb n
#Mazda RX4         -0.6 -15.6 138.4  88.4 -17.70 -18.980 -5.14 -21.6 -20.6 -17.6 -17.6 1
#Mazda RX4 Wag     -0.6 -15.6 138.4  88.4 -17.70 -18.725 -4.58 -21.6 -20.6 -17.6 -17.6 1
#Datsun 710         1.2 -17.6  86.4  71.4 -17.75 -19.280 -2.99 -20.6 -20.6 -17.6 -20.6 1
#Hornet 4 Drive    -0.2 -15.6 236.4  88.4 -18.52 -18.385 -2.16 -20.6 -21.6 -18.6 -20.6 1
#Hornet Sportabout -2.9 -13.6 338.4 153.4 -18.45 -18.160 -4.58 -21.6 -21.6 -18.6 -19.6 1
#Valiant           -3.5 -15.6 203.4  83.4 -18.84 -18.140 -1.38 -20.6 -21.6 -18.6 -20.6 1
...