从 R-Version 4.1.0 开始,管道|>处于稳定版本。当将 lhs 传递给第一个参数以外的参数时,手册的示例显示:
mtcars |> subset(cyl == 4) |> (function(d) lm(mpg ~ disp, data = d))()
Run Code Online (Sandbox Code Playgroud)
或使用时 \(x)
mtcars |> subset(cyl == 4) |> (\(d) lm(mpg ~ disp, data = d))()
Run Code Online (Sandbox Code Playgroud)
或者使用当前需要激活的PIPEBIND:
Sys.setenv(`_R_USE_PIPEBIND_` = TRUE)
mtcars |> subset(cyl == 4) |> . => lm(mpg ~ disp, data = .)
Run Code Online (Sandbox Code Playgroud)
|>也可以使用Bizarro 管道 代替->.;
mtcars |> subset(cyl == 4) ->.; lm(mpg ~ disp, data = .)
Run Code Online (Sandbox Code Playgroud)
由于 R 中管道符号的一个目的是允许以一种可能使处理步骤序列 更容易遵循 …
有没有办法在基本 R 中进行管道传输,而无需定义自己的函数(即“开箱即用”的东西),也无需加载任何外部包?
也就是说,一些(基数 R)替代 magrittr pipe %>%。可能在即将推出的 R (?)
此功能在 R 4.0.3 中是否可用。如果不是,它是在哪个 R 版本中找到的,如果是,这是如何实现的?
使用本机管道 |> 在基本 R 中选择数据帧的多列有哪些好方法?(即,没有 tidyverse/dplyr 来减少外部依赖性)。
如果我们有数据框
dtf <- data.frame(a = 1:3, b = 4:6, c = 7:9)
Run Code Online (Sandbox Code Playgroud)
然后我们可以选择列 b 和 c
> dtf[c("b", "c")]
b c
1 4 7
2 5 8
3 6 9
Run Code Online (Sandbox Code Playgroud)
在 tidyverse 中使用本机管道执行此操作的一种优雅方法是
> dtf |> dplyr::select(b, c)
b c
1 4 7
2 5 8
3 6 9
Run Code Online (Sandbox Code Playgroud)
我对原生管道的最佳基础 R 尝试是
> dtf |> subset(select = c("b", "c"))
b c
1 4 7
2 5 8
3 6 9
Run Code Online (Sandbox Code Playgroud)
更简洁(但失败的尝试)是
> dtf …Run Code Online (Sandbox Code Playgroud) 我有以下向量:
v<-c(1,2,3,4,1,2,3,4,2)
Run Code Online (Sandbox Code Playgroud)
我想将其“转换”为 3x3 矩阵:
matrix <- matrix(data=v,ncol=3)
Run Code Online (Sandbox Code Playgroud)
然后我想“翻转”(不是转置)
flip_matrix<-matrix[,3:1,drop=FALSE]
Run Code Online (Sandbox Code Playgroud)
使用 tidyverse 管道来链接所有这些非常容易,但为了减少依赖关系,我想使用基本 R 来解决这个问题。我可以创建多个对象并忘记管道,但我需要知道这是如何实现的与基管一起完成。到目前为止,我没有运气:
v<-c(1,2,3,4,1,2,3,4,2)
final_matrix <- matrix(data=v,ncol=3) |> .[,3:1.drop=FALSE]()
Run Code Online (Sandbox Code Playgroud)
这告诉我对象“。” 没找到。我尝试过其他迭代但没有运气......感谢您的帮助!