Список поднабора R "неверное количество измерений" - PullRequest
1 голос
/ 07 февраля 2020

Я работаю с текстом в списке. Текст разделяется CR / LF, поэтому я разбил строку на этом. Затем я должен очистить список, чтобы сделать его пригодным для использования.

library(tidyverse)
my_list <-("abc\r\ndef\r\nghi\r\njkl\r\n")
# The str_split gives me a list that has an empty element at the end. Why?
split_list <- str_split(my_list, "\r\n")
[[1]]
[1] "abc" "def" "ghi" "jkl" ""

Мне нужно удалить первые два элемента и затем отсортировать в обратном порядке:

split_list %>%
  split_list[[1]][-1:-2] %>%
  sort(split_list, decreasing = TRUE)

Но это терпит неудачу с Error in.[split_list[[1]], -1:-2] : incorrect number of dimensions

Я прочитал очень много обсуждений подмножеств, но все они кажутся более сложными, чем мой пример. Я явно еще не понимаю этого. Спасибо за ваши предложения!

Ответы [ 3 ]

1 голос
/ 07 февраля 2020

Вы можете сделать:

library(magrittr)
split_list %>% .[[1]] %>% tail(-2) %>% sort(decreasing = TRUE)
#[1] "jkl" "ghi" ""   
0 голосов
/ 07 февраля 2020

Если вы работаете только с одним вектором, так что str_split только когда-либо возвращает список с одним элементом, содержащим вектор расщепления, вы можете заключить свой str_split() в функцию unlist(), чтобы получить вектор расщепленных элементов напрямую , Это может выглядеть примерно так:

sort(unlist(str_split(my_list, "\r\n"))[-c(1:2)], decreasing = TRUE)

Выше я также подставил незарегистрированный вектор, чтобы удалить первые два элемента, а затем обернуть все выражение внутри функции sort() с помощью decreasing = TRUE.

0 голосов
/ 07 февраля 2020

Вот способ использования «[[» и «[» внутри структуры Tidyverse. Они обе функции, поэтому вам нужно backtick использовать их, когда они используются таким образом. (Ваша ошибка возникает из-за двойной ссылки на объект данных. Вам не нужно дважды ссылаться на split_list.) tidyverse создает неявный проход к ведущему объекту данных, так как он постепенно изменяется последовательностью функций. Функции становятся чем-то похожими на 'infix' -функции в base R:

split_list %>%
     `[[`(1) %>%   # pulls first column from split_list
     `[`(-1:-2) %>%  # both extraction functions used by back-ticked names
     sort( decreasing = TRUE)
[1] "jkl" "ghi" ""   

Это на самом деле очень похоже на расположение, которое вы могли бы использовать в base R, используя эти функции, которые также являются infix:

sort( split_list
            [[ 1]]
            [ (-1:-2)], 
                decreasing = TRUE)

[1] "jkl" "ghi" ""   
...