program tip

list.files ()와 같이 디렉토리 내의 디렉토리 목록을 얻는 방법 대신 "list.dirs ()"

radiobox 2020. 11. 20. 08:50
반응형

list.files ()와 같이 디렉토리 내의 디렉토리 목록을 얻는 방법 대신 "list.dirs ()"


이것은 누군가에게는 매우 쉬운 질문 일 수 있습니다 list.files(). 주어진 디렉토리에있는 파일 목록을 얻는 데 사용할 수 있지만 디렉토리 목록을 얻으려면 어떻게해야합니까? 어떻게 든 내 옵션으로 내 앞에 list.files()있습니까?

또한 Windows를 사용하고 있으므로 Linux / unix 명령을 사용하는 것이 답이라면 작동하지 않습니다.

예를 들어 .NET에는 Directory.GetFiles()메서드와 별도의 Directory.GetDirectories()메서드가 있으므로 R이 유사한 쌍을 가질 것이라고 생각했습니다. 미리 감사드립니다.


업데이트 : list.dirs2011 년 4 월 R-2.13.0 릴리스에 포함 된 버전 54353의 기본 패키지에 기능이 추가되었습니다.

list.dirs(path = ".", full.names = TRUE, recursive = TRUE)

그래서 아래의 기능은 몇 달 동안 만 유용했습니다. :)


이 작업을 수행하는 기본 R 함수를 찾을 수는 없지만 다음을 사용하여 직접 작성하는 것은 매우 쉽습니다.

dir()[file.info(dir())$isdir]

업데이트 : 여기에 기능이 있습니다 (이제 Timothy Jones의 설명에 맞게 수정 됨).

list.dirs <- function(path=".", pattern=NULL, all.dirs=FALSE,
  full.names=FALSE, ignore.case=FALSE) {
  # use full.names=TRUE to pass to file.info
  all <- list.files(path, pattern, all.dirs,
           full.names=TRUE, recursive=FALSE, ignore.case)
  dirs <- all[file.info(all)$isdir]
  # determine whether to return full names or just dir names
  if(isTRUE(full.names))
    return(dirs)
  else
    return(basename(dirs))
}

baseR에는 이제 list.dirs함수가 포함되어 있으므로 직접 만든 변형이 더 이상 필요하지 않습니다.

예를 들면 :

list.dirs('.', recursive=FALSE)

이 스레드를 업데이트하려면 :

최신 버전의 R (현재 2.5.1을 사용하고 있음) list.dirs에는 기본 설치에 포함 된 기능이 있습니다.

list.dirs는 암시 적으로 all.files = TRUE이고 recursive = TRUE이면 응답에 경로 자체가 포함됩니다 (읽을 수있는 디렉토리 인 경우).


list.dirs <- function(...) {
    x <- dir(...)
    x[file_test("-d", x)]
}

유용할까요?

이것을 재귀 적으로 어떻게 할 수 있습니까? (의 recursive인수 dir는 디렉터리 이름을 반환하지 않고 각 디렉터리 내의 파일 만 반환하기 때문에 이러한 함수 중단합니다.)


Linux / UNIX 명령을 셸 아웃하고 싶지 않다고 언급했지만 Windows 명령을 셸 아웃해도 괜찮다고 가정합니다. 이 경우 다음과 같이됩니다.

shell("dir/ad/b", intern = TRUE)

그리고 이것은 재귀 적으로 할 것입니다.

shell("dir/ad/b/s", intern = TRUE)

일반적으로 나는 다른 사람들의 플랫폼 독립적 솔루션을 선호하지만 특히 가능한 한 간단하고 직접적으로 대답을 얻는 데 관심이있는 대화식 사용의 경우 작업이 적을 수 있습니다.


이와 같은 것은 어떨까요, 시도해보십시오.

dir('.')[file.info(dir('.',full.names=T))$isdir]

나는이 문제가 얼마 전에 있었고이 재귀 코드를 사용하여 모든 디렉토리를 찾았습니다. 아마도 이것이 유용 할 수 있습니까?

list.dirs <- function(parent=".")   # recursively find directories
{
    if (length(parent)>1)           # work on first and then rest
        return(c(list.dirs(parent[1]), list.dirs(parent[-1])))
    else {                          # length(parent) == 1
        if (!is.dir(parent))
            return(NULL)            # not a directory, don't return anything
        child <- list.files(parent, full=TRUE)
        if (!any(is.dir(child)))
            return(parent)          # no directories below, return parent
        else 
            return(list.dirs(child))    # recurse
    }
}

is.dir <- function(x)    # helper function
{
    ret <- file.info(x)$isdir
    ret[is.na(ret)] <- FALSE
    ret
}

참고 URL : https://stackoverflow.com/questions/4749783/how-to-obtain-a-list-of-directories-within-a-directory-like-list-files-but-i

반응형