用于索引的 R 管道运算符
R pipe operator for indexing
我想拥有与 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
例如,您可以这样做。对向量和矩阵的行和列进行子集化 / 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"
我想拥有与 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
例如,您可以这样做。对向量和矩阵的行和列进行子集化 / 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"