R管道操作员进行分度

时间:2018-10-17 12:51:09

标签: r function indexing pipeline

我希望拥有与dplyr的%>%相同的管道运算符,但是用于索引而不是传递函数。例如,我想定义函数%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

1 个答案:

答案 0 :(得分:0)

例如,您可以执行此操作。为向量和矩阵/ 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"