DF:
df <- tibble(
a = c("z", "x", "y"),
b = c("m", "n", "o"),
c = c("p", "q", "r")
)
-我想在以下位置查看 names(.)
(检查)的结果:
df %>%
set_names(c(names(.)[1], unlist(.[2, 2:3])))
-我知道它是 c("a", "b", "c")
,或者 unlist(.[2, 2:3])
中的结果。这是一个例子,我想在 R 中的任何操作中应用这个想法。有什么东西吗?我想深入了解某个函数在做什么。
答案 0 :(得分:0)
不确定这是否是您的想法,但 lobstr::ast()
显示了 R 创建的抽象语法树,用于确定调用中的各种输入和函数之间的关系。
lobstr::ast(df %>%
set_names(c(names(.)[1], unlist(.[2, 2:3]))))
█─`%>%`
├─df
└─█─set_names
└─█─c
├─█─`[`
│ ├─█─names
│ │ └─.
│ └─1
└─█─unlist
└─█─`[`
├─.
├─2
└─█─`:`
├─2
└─3
答案 1 :(得分:0)
也许您正在寻找@Moody_Mudskipper 的boomer package:
使用 remotes::install_github("moodymudskipper/boomer")
安装
library(boomer)
boom(1 + !1 * 2)
#> 1 * 2
#> [1] 2
#> !1 * 2
#> [1] FALSE
#> 1 + !1 * 2
#> [1] 1
boom(subset(head(mtcars, 2), qsec > 17))
#> head(mtcars, 2)
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> Mazda RX4 21 6 160 110 3.9 2.620 16.46 0 1 4 4
#> Mazda RX4 Wag 21 6 160 110 3.9 2.875 17.02 0 1 4 4
#> qsec > 17
#> [1] FALSE TRUE
#> subset(head(mtcars, 2), qsec > 17)
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> Mazda RX4 Wag 21 6 160 110 3.9 2.875 17.02 0 1 4 4
# You can use boom() with {magrittr} pipes, just pipe to boom() at the end of a pipe chain.
library(magrittr)
mtcars %>%
head(2) %>%
subset(qsec > 17) %>%
boom()
#> head(., 2)
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> Mazda RX4 21 6 160 110 3.9 2.620 16.46 0 1 4 4
#> Mazda RX4 Wag 21 6 160 110 3.9 2.875 17.02 0 1 4 4
#> qsec > 17
#> [1] FALSE TRUE
#> subset(., qsec > 17)
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> Mazda RX4 Wag 21 6 160 110 3.9 2.875 17.02 0 1 4 4
#> mtcars %>% head(2) %>% subset(qsec > 17)
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> Mazda RX4 Wag 21 6 160 110 3.9 2.875 17.02 0 1 4 4
#If a call fails, {boomer} will print intermediate outputs up to the occurrence of the error, it can help with debugging:
"tomato" %>%
substr(1, 3) %>%
toupper() %>%
sqrt() %>%
boom()
#> substr(., 1, 3)
#> [1] "tom"
#> toupper(.)
#> [1] "TOM"
#> Error in .Primitive("sqrt")(.): non-numeric argument to mathematical function
Boomer 在执行中间步骤时打印它们的输出,因此不会说明未执行的内容,这与返回解析树的 lobstr::ast() 等函数形成对比。
>显然,boomer 对 set_names 函数并不“友好”;这是一个类似的例子:
df %>%
names(.)[1] %>%
boom()
#>names(.)
#>[1] "a" "b" "c"
#>.[names(.), 1]
#> A tibble: 3 x 1
#> a
#> <dbl>
#>1 NA
#>2 NA
#>3 NA
#>df %>% names(.)[1]
#> A tibble: 3 x 1
#> a
#> <dbl>
#>1 NA
#>2 NA
#>3 NA