Назначение переменной внутри канала и продолжение? - PullRequest
0 голосов
/ 04 февраля 2019
hist(dat)
std_dev <- sd()
round(std_dev,3)

Мой профессор хочет, чтобы мы поместили это в одну строку кода, используя каналы, однако у меня есть проблемы с назначением std_dev <- sd() и продолжением.

Попытки:

dat %T>% hist() %>% sd() %>% .->std_dev %>% round(.,3) 

Ошибка в. (.): Не удалось найти функцию "."

dat %T>% hist() %>% sd() %>% ~(.->std_dev) %>% round(,3)

Не присваиваетчто-нибудь для std_dev.

dat %T>% hist() %>% sd() %>% =std_dev %>% round(,3)

неожиданный =

dat %T>% hist() %>% sd() %>% ->std_dev %>% round(,3)

неожиданный '->'

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Одним из возможных способов получения побочного эффекта, который вам нужен, может быть использование assign, оно немного более многословно, но работает, как ожидается, в вашем первом чанке.

library(magrittr)
dat %T>%
  hist() %T>%
  {assign(x = "std_dev", value = sd, envir = .GlobalEnv)} %>%
  std_dev() %>%
  round(3)

Использование %T>%пока данными не нужно манипулировать.Кроме того, убедитесь, что вы присвоили соответствующую среду с помощью assign.

. При этом также используются только трубы, доступные в пакете magrittr.

Примечание: это может потребовать измененияпоскольку предоставленный вами исходный фрагмент кода сомнителен - в функцию round() не передаются никакие данные, а скорее функция, назначенная вами из существующего sd().

0 голосов
/ 04 февраля 2019

Вы близки.

дата% T>% hist ()%>% sd ()%>% round (., 3) -> std_dev

Не делайте этогов реальном мире.Не очень читабельно.

...