R трубач для индексации - PullRequest
       6

R трубач для индексации

0 голосов
/ 17 октября 2018

Я хочу иметь такой же оператор канала, как и у 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 голосов
/ 17 октября 2018

Вы можете сделать это, например.Подмножество строк и столбцов для векторов и матриц / 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"
...