Преобразовать подмножество в префиксную версию, чтобы использовать канал - PullRequest
1 голос
/ 21 апреля 2020

Мне нужно преобразовать операцию подмножества матрицы [, 2:3] в префиксную версию '['(, и в данный момент я застрял. Каким способом я должен исправить приведенный ниже код?

library(tidyverse)

d <- tibble(x = str_c(letters[1:10], letters[1:10], letters[1:10], sep = "_"))

d %>% 
  pull(x) %>%
  str_split("_", simplify = TRUE) %>%
  `[`(c(2, 3)) # ???

# want in terms of result not code:
d %>%
  pull(x) %>%
  str_split("_", simplify = TRUE) -> tmp
tmp[, 2:3] 

# [,1] [,2]
# [1,] "a"  "a" 
# [2,] "b"  "b" 
# [3,] "c"  "c" 
# [4,] "d"  "d" 
# [5,] "e"  "e" 
# [6,] "f"  "f" 
# [7,] "g"  "g" 
# [8,] "h"  "h" 
# [9,] "i"  "i" 
# [10,] "j"  "j" 

Ответы [ 2 ]

3 голосов
/ 21 апреля 2020

Наверное, самое простое - это использовать .

d %>% 
  pull(x) %>%
  str_split("_", simplify = TRUE) %>%
  .[, 2:3]

#       [,1] [,2]
#  [1,] "a"  "a" 
#  [2,] "b"  "b" 
#  [3,] "c"  "c" 
#  [4,] "d"  "d" 
#  [5,] "e"  "e" 
#  [6,] "f"  "f" 
#  [7,] "g"  "g" 
#  [8,] "h"  "h" 
#  [9,] "i"  "i" 
# [10,] "j"  "j" 

Но если вы хотите, вы также можете сделать

d %>% 
  pull(x) %>%
  str_split("_", simplify = TRUE) %>%
  '['(, 2:3)

#       [,1] [,2]
#  [1,] "a"  "a" 
#  [2,] "b"  "b" 
#  [3,] "c"  "c" 
#  [4,] "d"  "d" 
#  [5,] "e"  "e" 
#  [6,] "f"  "f" 
#  [7,] "g"  "g" 
#  [8,] "h"  "h" 
#  [9,] "i"  "i" 
# [10,] "j"  "j" 
1 голос
/ 21 апреля 2020

Другой вариант - separate

library(dplyr)
library(tidyr)
d %>% 
   separate(x, into = c('x1', 'x2', 'x3')) %>% 
   select(1:2) %>% 
   as.matrix
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...