在 magrittr 管道中打印数据框的一个元素

printing one element of a dataframe in a magrittr pipe

考虑这个简单的例子

library(dplyr)
library(glue)
library(magrittr)

> mydata <- data_frame(value = c(1,2,3))
> mydata
# A tibble: 3 x 1
  value
  <dbl>
1    1.
2    2.
3    3.

我想从 magrittr 管道中打印我的数据框中的列 value2 的第二个元素。

我知道我可以利用 magrittr 中的 tee 运算符,但是正如您在下面看到的,我的代码不起作用:

  1. 它不打印任何东西
  2. 它本身不提取值。 Indeed"the second element of value2 is 1" 只是一个字符串。我还尝试了一些 glue::"the second element of {} is {}" 的变体,但没有成功。

例如,

> mydata %>% mutate(value2 = value - 1) %T>% 
    print('the second element of value2 is 1') %>% 
    summarize(count = n())
# A tibble: 3 x 2
  value value2
  <dbl>  <dbl>
1    1.     0.
2    2.     1.
3    3.     2.
# A tibble: 1 x 1
  count
  <int>
1     3

知道如何以编程方式做到这一点吗? 谢谢!

使用 sprintf:

nm = "value2"
mydata %>% mutate(value2 = value - 1) %T>% {
  cat(sprintf('the second element of %s is %s.\n', nm, nth(.[[nm]], 2))) } %>% 
  summarize(count = n())

the second element of value2 is 1.
# A tibble: 1 x 1
  count
  <int>
1     3

或者用胶水

nm = "value2"
mydata %>% mutate(value2 = value - 1) %T>% {
  x = nth(.[[nm]], 2)
  cat(glue('the second element of {nm} is {x}.\n\n')) } %>% 
  summarize(count = n())

the second element of value2 is 1.
# A tibble: 1 x 1
  count
  <int>
1     3

出于某种原因,glue 吃掉了第一个换行符 (\n)。

{} 是必需的,因为 "egad" %T>% print("some words") 根据 magrittr 语义评估为 print("egad", "some words")