首页 > 解决方案 > 用于索引的 R 管道运算符

问题描述

我想拥有与 dplyr's 相同类型的管道运算符%>%,但用于索引而不是传递函数。例如,我想%l%为至少向量和矩阵定义函数:

1 %l% df将等效于df[1](向量)或df[1,](矩阵)。

abc <- c("a","b", "c")
def <- c("d","e", "f")
df <- data.frame(abc, def, stringsAsFactors = F) 
df %l% 1

标签: rfunctionindexingpipeline

解决方案


例如,您可以这样做。为向量和矩阵/data.frames 设置行和列的子集。

`%l%` <- lineindex <- function(x, y) {
  result <- NA
  if(is.null(dim(y))|(!is.null(dim(y))&ncol(y)==1)) {
    result <- y[x]
  } else if(length(dim(y))==2) {
    result <- y[x,]
  } 
  return(result)
}
   `%c%` <- colindex <- function(x, y) {
  result <- NA
  if(is.null(dim(y))|(!is.null(dim(y))&ncol(y)==1)) {
    result <- y[x]
  } else if(length(dim(y))==2) {
    result <- y[,x]
  }
  return(result)
}

c(1,NA,2) %>% is.na() %>% which() %l% df 
  abc def
2   b   e
c(1,NA,2) %>% is.na() %>% which() %c% df 
[1] "d" "e" "f"

推荐阅读