在管道中分配变量并继续?

时间:2019-02-04 02:42:46

标签: r pipe magrittr

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 :(得分:1)

你很近。

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

但是,在现实世界中不要这样做。不太可读。

答案 1 :(得分:0)

一种产生副作用的可能方法是使用assign,它虽然比较冗长,但可以在第一个块中按预期工作。

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

使用%T>%,直到需要处理数据为止。此外,请确保使用assign分配给适当的环境。

这也仅使用magrittr软件包中可用的管道。

注意:由于您提供的初始代码块存在疑问,因此可能需要进行更改-没有数据传递到round()函数中,而是传递给您从现有函数分配的函数中sd()