list.files ()와 같이 디렉토리 내의 디렉토리 목록을 얻는 방법 대신 "list.dirs ()"
이것은 누군가에게는 매우 쉬운 질문 일 수 있습니다 list.files()
. 주어진 디렉토리에있는 파일 목록을 얻는 데 사용할 수 있지만 디렉토리 목록을 얻으려면 어떻게해야합니까? 어떻게 든 내 옵션으로 내 앞에 list.files()
있습니까?
또한 Windows를 사용하고 있으므로 Linux / unix 명령을 사용하는 것이 답이라면 작동하지 않습니다.
예를 들어 .NET에는 Directory.GetFiles()
메서드와 별도의 Directory.GetDirectories()
메서드가 있으므로 R이 유사한 쌍을 가질 것이라고 생각했습니다. 미리 감사드립니다.
업데이트 : list.dirs
2011 년 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))
}
base
R에는 이제 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
}
'program tip' 카테고리의 다른 글
OpenCV에서 RGB를 흑백으로 변환 (0) | 2020.11.20 |
---|---|
라디오 버튼 "Checked"속성이 작동하지 않음 (0) | 2020.11.20 |
Eclipse의 프록시 설정을 사용하지 않는 Maven 플러그인 (0) | 2020.11.20 |
추상 클래스의 getClass ()는 모호한 메서드 호출을 제공합니다. (0) | 2020.11.20 |
Google Apps Script에서 콘솔로 인쇄 하시겠습니까? (0) | 2020.11.20 |