list.dirs но вывести список с вложенными папками - PullRequest
0 голосов
/ 01 февраля 2019

Мне было интересно - базовые R list.dirs дают вам символьный вектор со структурой вложенной папки, сплющенной до символьного вектора.Есть ли функция, которая возвращает список папок класса list?То есть, если ./a/b/c существовал, текущий list.dirs возвращает

[1] "a"                                                                       
[2] "a/b"                                                        
[3] "a/b/c"                                           

, но вместо этого возвращает что-то вроде

$`a`
$`a`$`b`
$`a`$`b`$`c`
[1] "a/b/c"

Возможно, я упускаю простое существующее решение?

1 Ответ

0 голосов
/ 03 февраля 2019

Я не уверен, есть ли простое решение для этого, но я написал функцию, которая делает что-то подобное

recur.list <- function(x, y) {
    if(length(x) == 1)
     setNames(list(y), x[1])
    else
     setNames(list(recur.list(x[-1], y)), x[1])
}

listed_list.dirs <- function(folder_name) {
      vec <- strsplit(folder_name, "/")
      mapply(recur.list, vec, folder_name)
}

В основном recur.list - рекурсивная функция, которая создает вложенный список на основе глубиныиз папок, тогда как listed_list.dirs разделяет имя папки на "/" и создает отдельный вектор символов для каждого из folder_name.

x <- c("a","a/b","a/b/c")
listed_list.dirs(x)

#$a
#[1] "a"

#$a
#$a$b
#[1] "a/b"


#$a
#$a$b
#$a$b$c
#[1] "a/b/c"

Другой пример

listed_list.dirs("Users/ronakshah/Downloads/")

#$Users
#$Users$ronakshah
#$Users$ronakshah$Downloads
#[1] "Users/ronakshah/Downloads/"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...