Как вложить несколько трубок магриттр
Это начинается как эстетический вопрос, но затем превращается в функциональный, особенно в отношении magrittr.
Я хочу добавить data_frame, который вручную вводится в тот, который уже есть, как показано ниже:
cars_0 <- mtcars %>%
mutate(brand = row.names(.)) %>%
select(brand, mpg, cyl)
new_cars <- matrix(ncol = 3, byrow = T, c(
"VW Beetle", 25, 4,
"Peugeot 406", 42, 6)) # Coercing types is not an issue here.
cars_1 <- rbind(cars_0,
set_colnames(new_cars, names(cars_0)))
Я пишу новые машины в матрице для "повышенной разборчивости", и поэтому мне нужно установить имена столбцов, чтобы они были привязаны к cars_0
,
Если кто-то любит magrittr так же сильно, как и я, он может захотеть представить new_cars
сначала и трубку это set_colnames
cars_1 <- rbind(cars_0, new_cars %>%
set_colnames(names(cars_0)))
Или, чтобы избежать повторения, они захотят указать cars_0
и труба это rbind
cars_1 <- cars_0 %>%
rbind(., set_colnames(new_cars, names(.)))
Однако нельзя сделать и то, и другое, так как существует путаница в отношении того, кому это нужно.
cars_1 <- cars_0 %>%
rbind(., new_cars %>% set_colnames(names(.)))
## Error in match.names(clabs, names(xi)) :
## names do not match previous names
Мой вопрос: есть ли способ отличить два аргумента, которые передаются по трубопроводу?
1 ответ
Краткий ответ: нет.
Более длинный ответ: я не уверен, каково было бы обоснование для этого. Философия позади magrittr
заключался в том, чтобы разворачивать составные функции, с основной целью облегчить чтение кода. Например:
f(g(h(x)))
становится
h(x) %>% g() %>% f()
Попытка использовать каналы таким образом, чтобы два объекта интерпретировались как .
аргумент идет вразрез с философией упрощения. Существуют обстоятельства, при которых вы можете иметь вложенные трубы, но среда должна оставаться отличной. Попытки пересечь две трубы в одной и той же среде можно сравнить с пересечением потоков.
Не пересекать потоки:)