R原生管道|>链式处理中如何引用未命名中间输出延续流程
解决思路
R中函数单次只能返回一个对象,你只需要将两个中间处理结果打包到同一个列表中传递给后续步骤即可,所有中间变量仅在匿名函数内部生效,不会生成你需要避免的全局命名对象。
完整可运行代码
library(dplyr) iris |> (\(x){ # 两个中间结果仅为函数内部局部变量,运行后自动销毁 list( filter(x, Species == "setosa") |> pull(Sepal.Length), filter(x, Species == "versicolor") |> pull(Sepal.Length) ) })() |> # 提取列表中两个元素计算相关性 (\(lst) cor(lst[[1]], lst[[2]]))()
补充说明
- 如果你需要保留
dplyr::select的写法而非拉取为向量,直接替换pull(Sepal.Length)为dplyr::select(Sepal.Length)即可,计算逻辑完全一致,仅返回结果为1×1的相关性矩阵,若需数值结果可在外层包裹as.numeric()。 - 如果你偏好显式的局部变量赋值写法,也可以写成如下形式,运行效果完全一致:
library(dplyr) iris |> (\(x){ setosa_sl <- filter(x, Species == "setosa") |> pull(Sepal.Length) versicolor_sl <- filter(x, Species == "versicolor") |> pull(Sepal.Length) list(setosa_sl, versicolor_sl) })() |> (\(lst) cor(lst[[1]], lst[[2]]))()
内容的提问来源于stack exchange,提问作者Carlos Luis Rivera
相关产品推荐
相关产品推荐

