gpt4 book ai didi

r - %T>% 函数在 R 中意味着什么?

转载 作者:行者123 更新时间:2023-12-05 08:20:12 25 4
gpt4 key购买 nike

如果可能的话,你能用一些例子解释这个管道 - %T>% 吗?我只找到一个带有情节的例子:

rnorm(200) %>%
matrix(ncol = 2) %T>%
plot %>% # plot usually does not return anything.
colSums

https://www.rdocumentation.org/packages/magrittr/versions/1.5/topics/%25T%3E%25

但是从这个和描述我不明白用法。谢谢

最佳答案

x %>% f()x %T>% f() 都运行 f(x) 但区别在于第一个返回 f(x) 的输出,而第二个返回 x

1) 情节%T>% 通常与 plot 或其他不返回任何内容的命令一起使用。运行此类命令是为了它们的副作用,在本例中是绘图,而不是它们的返回值。因为 plot 只返回 NULL,所以 BOD %>% plot 也只返回 NULL,所以如果我们想继续在管道中前进,我们不能。如果我们使用 %T>% 而不是 %>% 那么我们仍然可以。

library(dplyr)
library(magrittr)

BOD %T>%
plot %>%
mutate(demand = demand + 1)

2) 海峡。另一个例子是如果我们想通过查看中间结果来调试管道。 str 不返回任何内容,因此如果我们想在管道中继续,我们可以使用 %T>%

library(dplyr)
library(magrittr)

BOD %T>%
str %>%
mutate(demand = demand + 1)

3) lm/summary 假设我们想在管道中显示 summary 的输出,然后继续计算残差平方和,即 deviance。我们希望将 deviance 应用于 lm 的输出,而不是 print(summary(.)) 的输出。注意:当管道进入括号表达式时,必须显式使用 .,如 summary(.) 中所示。

library(dplyr)
library(magrittr)

BOD %>%
lm(demand ~ Time, data = .) %T>%
{ summary(.) %>% print } %>%
deviance

4) lm 假设我们要分别在第 1:4、2:5 和 3:6 行运行 lm。然后我们可以像这样多次使用%T>%:

library(magrittr)

BOD %T>%
{ lm(demand ~ Time, data = ., subset = 1:4) %>% print } %T>%
{ lm(demand ~ Time, data = ., subset = 2:5) %>% print } %>%
{ lm(demand ~ Time, data = ., subset = 3:6) %>% print }

这个例子确实说明了在同一管道中多次使用 %T>%;但是,通过使用 update,可以在不使用任何管道的情况下更轻松地完成。

fm <- lm(demand ~ Time, data = BOD)
update(fm, subset = 1:4)
update(fm, subset = 2:5)
update(fm, subset = 3:6)

备选方案

不用 %T>% 也可以通过其他方式获得同样的效果。使用第一个示例,它运行 plot 显式返回输入点。

library(dplyr)

BOD %>%
{ plot(.); . } %>%
mutate(demand = demand + 1)

第二种选择是将其分成两个管道:

library(dplyr)

BOD %>% plot
BOD %>% mutate(demand = demand + 1)

第三种选择是定义一个返回其输入的函数:

library(dplyr)

plot_ <- function(data, ...) { plot(data, ...); data }
BOD %>%
plot_ %>%
mutate(demand = demand + 1)

类似的替代方案也适用于其他示例。

关于r - %T>% 函数在 R 中意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59551512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com