如何使用 purrr 以编程方式 cat and/or print janitor tabyl 输出
How to use purrr to programatically cat and/or print janitor tabyl output
假设您正在使用 tidyverse
来 nest() 一组 select 分类变量:
library(tidyverse)
library(janitor)
nested_df <- mpg %>%
select(manufacturer, class) %>%
gather(variable, value) %>%
group_by(variable) %>%
nest()
nested_df
# A tibble: 2 x 2
variable data
<chr> <list>
1 manufacturer <tibble [234 x 1]>
2 class <tibble [234 x 1]>
现在我们可以添加一个新列,其中包含 janitor::tabyl
:
的输出
nested_df %>%
mutate(
table_output = map(data, ~ tabyl(.$value))
)
# A tibble: 2 x 3
variable data table_output
<chr> <list> <list>
1 manufacturer <tibble [234 x 1]> <tabyl [15 x 3]>
2 class <tibble [234 x 1]> <tabyl [7 x 3]>
问题:
- 我们如何打印或遍历输出以获取
variable
名称和 table_output
?
- 是否有更好的方法(例如使用
split
而不是 group_by %>% nest
?
类似于打印以下内容...
Variable is: manufacturer
Tabyl Output:
.$value n percent
audi 18 0.07692308
chevrolet 19 0.08119658
dodge 37 0.15811966
ford 25 0.10683761
...more rows...
mercury 4 0.01709402
nissan 13 0.05555556
pontiac 5 0.02136752
subaru 14 0.05982906
toyota 34 0.14529915
volkswagen 27 0.11538462
Variable is: class
Tabyl Output:
.$value n percent
2seater 5 0.02136752
compact 47 0.20085470
midsize 41 0.17521368
minivan 11 0.04700855
pickup 33 0.14102564
subcompact 35 0.14957265
suv 62 0.26495726
我们可以使用 pwalk
、cat
和 print
。 pwalk
的输入是 data.frame(列表列表),仅包含 variable
和 table_output
列。类似于 pmap
,pwalk
同时遍历两列的每个元素,并在匿名函数中被 .x
和 .y
引用。与 pmap
不同,pwalk
执行代码而不返回任何输出。当我们只想要代码执行的副作用时,这很有用:
library(tidyverse)
library(janitor)
nested_df <- mpg %>%
select(manufacturer, class) %>%
gather(variable, value) %>%
group_by(variable) %>%
nest()
nested_df %>%
mutate(
table_output = map(data, ~ tabyl(.$value))
) %>%
select(-data) %>%
pwalk(~{
cat(paste0('Variable is: ', .x, '\n\nTabyl Output: \n\n'))
print(.y)
cat('\n\n')
})
为了打印字符串,我们使用cat
来避免前面的[1]
。要打印 table 输出,我们使用 print
。 "\n"
s 被添加到填充空白行以提高可读性。
输出:
Variable is: manufacturer
Tabyl Output:
.$value n percent
audi 18 0.07692308
chevrolet 19 0.08119658
dodge 37 0.15811966
ford 25 0.10683761
honda 9 0.03846154
hyundai 14 0.05982906
jeep 8 0.03418803
land rover 4 0.01709402
lincoln 3 0.01282051
mercury 4 0.01709402
nissan 13 0.05555556
pontiac 5 0.02136752
subaru 14 0.05982906
toyota 34 0.14529915
volkswagen 27 0.11538462
Variable is: class
Tabyl Output:
.$value n percent
2seater 5 0.02136752
compact 47 0.20085470
midsize 41 0.17521368
minivan 11 0.04700855
pickup 33 0.14102564
subcompact 35 0.14957265
suv 62 0.26495726
假设您正在使用 tidyverse
来 nest() 一组 select 分类变量:
library(tidyverse)
library(janitor)
nested_df <- mpg %>%
select(manufacturer, class) %>%
gather(variable, value) %>%
group_by(variable) %>%
nest()
nested_df
# A tibble: 2 x 2
variable data
<chr> <list>
1 manufacturer <tibble [234 x 1]>
2 class <tibble [234 x 1]>
现在我们可以添加一个新列,其中包含 janitor::tabyl
:
nested_df %>%
mutate(
table_output = map(data, ~ tabyl(.$value))
)
# A tibble: 2 x 3
variable data table_output
<chr> <list> <list>
1 manufacturer <tibble [234 x 1]> <tabyl [15 x 3]>
2 class <tibble [234 x 1]> <tabyl [7 x 3]>
问题:
- 我们如何打印或遍历输出以获取
variable
名称和table_output
? - 是否有更好的方法(例如使用
split
而不是group_by %>% nest
?
类似于打印以下内容...
Variable is: manufacturer
Tabyl Output:
.$value n percent
audi 18 0.07692308
chevrolet 19 0.08119658
dodge 37 0.15811966
ford 25 0.10683761
...more rows...
mercury 4 0.01709402
nissan 13 0.05555556
pontiac 5 0.02136752
subaru 14 0.05982906
toyota 34 0.14529915
volkswagen 27 0.11538462
Variable is: class
Tabyl Output:
.$value n percent
2seater 5 0.02136752
compact 47 0.20085470
midsize 41 0.17521368
minivan 11 0.04700855
pickup 33 0.14102564
subcompact 35 0.14957265
suv 62 0.26495726
我们可以使用 pwalk
、cat
和 print
。 pwalk
的输入是 data.frame(列表列表),仅包含 variable
和 table_output
列。类似于 pmap
,pwalk
同时遍历两列的每个元素,并在匿名函数中被 .x
和 .y
引用。与 pmap
不同,pwalk
执行代码而不返回任何输出。当我们只想要代码执行的副作用时,这很有用:
library(tidyverse)
library(janitor)
nested_df <- mpg %>%
select(manufacturer, class) %>%
gather(variable, value) %>%
group_by(variable) %>%
nest()
nested_df %>%
mutate(
table_output = map(data, ~ tabyl(.$value))
) %>%
select(-data) %>%
pwalk(~{
cat(paste0('Variable is: ', .x, '\n\nTabyl Output: \n\n'))
print(.y)
cat('\n\n')
})
为了打印字符串,我们使用cat
来避免前面的[1]
。要打印 table 输出,我们使用 print
。 "\n"
s 被添加到填充空白行以提高可读性。
输出:
Variable is: manufacturer
Tabyl Output:
.$value n percent
audi 18 0.07692308
chevrolet 19 0.08119658
dodge 37 0.15811966
ford 25 0.10683761
honda 9 0.03846154
hyundai 14 0.05982906
jeep 8 0.03418803
land rover 4 0.01709402
lincoln 3 0.01282051
mercury 4 0.01709402
nissan 13 0.05555556
pontiac 5 0.02136752
subaru 14 0.05982906
toyota 34 0.14529915
volkswagen 27 0.11538462
Variable is: class
Tabyl Output:
.$value n percent
2seater 5 0.02136752
compact 47 0.20085470
midsize 41 0.17521368
minivan 11 0.04700855
pickup 33 0.14102564
subcompact 35 0.14957265
suv 62 0.26495726