Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
|>;(管道大于)R的平均值?_R_Pipe_Operators - Fatal编程技术网

|>;(管道大于)R的平均值?

|>;(管道大于)R的平均值?,r,pipe,operators,R,Pipe,Operators,我最近在R中遇到了代码|>。它是一个竖线字符(管道),后跟一个大于符号 以下是一个例子: mtcars |> head() |>代码在做什么?|>是基本的R“pipe”操作符。是的 简言之,管道操作符提供操作符左侧(LHS)的结果作为右侧(RHS)的第一个自变量 考虑以下几点: 1:3 |> sum() #[1] 6 这里,数字1到3的向量作为sum函数的第一个参数提供 左侧结果始终成为右侧调用的第一个参数。考虑: args(sum) #function (..., na.rm

我最近在R中遇到了代码
|>
。它是一个竖线字符(管道),后跟一个大于符号

以下是一个例子:

mtcars |> head()

|>
代码在做什么?

|>
是基本的R“pipe”操作符。是的

简言之,管道操作符提供操作符左侧(LHS)的结果作为右侧(RHS)的第一个自变量

考虑以下几点:

1:3 |> sum()
#[1] 6
这里,数字1到3的向量作为
sum
函数的第一个参数提供

左侧结果始终成为右侧调用的第一个参数。考虑:

args(sum)
#function (..., na.rm = FALSE) 

c(1:3, NA_real_) |> sum(na.rm = TRUE)
#[1] 6
args(rnorm)
#function (n, mean = 0, sd = 1) 
100 |> rnorm(n = 5)
#[1]  99.94718  99.93527  97.46838  97.38352 100.56502

args(sum)
#function (..., na.rm = FALSE) 
sum(na.rm = TRUE, ... = c(1:2,NA_real_))
#[1] 3
TRUE |> sum(... = c(1:2,NA_real_))
#[1] NA
强调调用很重要,因为只要第一个参数名为,就可以将LHS重定向到其他参数。考虑:

args(sum)
#function (..., na.rm = FALSE) 

c(1:3, NA_real_) |> sum(na.rm = TRUE)
#[1] 6
args(rnorm)
#function (n, mean = 0, sd = 1) 
100 |> rnorm(n = 5)
#[1]  99.94718  99.93527  97.46838  97.38352 100.56502

args(sum)
#function (..., na.rm = FALSE) 
sum(na.rm = TRUE, ... = c(1:2,NA_real_))
#[1] 3
TRUE |> sum(... = c(1:2,NA_real_))
#[1] NA

使用
|>
运算符的一个好处是,与嵌套函数调用相比,它可以使代码在逻辑上更易于遵循:

split(x = iris[-5], f = iris$Species) |>
  lapply(min) |>
  do.call(what = rbind) 
#           [,1]
#setosa      0.1
#versicolor  1.0
#virginica   1.4

#Compared to:
do.call(rbind,lapply(split(iris[-5],iris$Species),min))

此功能类似于操作员(也在
dplyr
中实现)

但是,与
%%>%%
不同的是,目前没有将LHS多次输送到右侧或任意位置的方法。Magrittr使用LHS的
占位符和
{}
任意放置它

library(magrittr)
iris[iris$Sepal.Length > 7,] %>% subset(.$Species=="virginica")

TRUE %>% {sum(c(1:2,NA_real_),na.rm = .)}
[1] 3
此外,与基本R
|>
不同,
%>%
运算符可以通过管道进入函数调用,而无需
()


还值得注意的是,这会引发一个错误:
1:3%>sum
,而这不是
1:3%>%sum
。你可以使用匿名函数
TRUE
{(x)sum(c(1:2,NA.rm=x),sum()。[1]3
1:3}>sum()
。@akrun我实际上也在考虑做一个
问答,但也许你想?@G.Grothendieck没有括号。