1) 첫 번째 줄은 각 객체에 대한 구성 요소가있는 to.rm
이라는 이름의 논리 벡터를 생성합니다.이 객체는 해당 객체를 제거해야하는 경우 TRUE이고 그렇지 않으면 FALSE입니다. 따라서 names(to.rm)[to.rm]
은 제거 할 객체이므로 rm
에 입력하십시오. 이를 두 단계로 나누어 실제로 rm
을 수행하기 전에 to.rm
을 검토 할 수 있습니다.
to.rm <- unlist(eapply(.GlobalEnv, function(x) is.data.frame(x) && ncol(x) < 3))
rm(list = names(to.rm)[to.rm], envir = .GlobalEnv)
이 지구 환경에 직접 입력하면 (즉 fucntion에 배치하지 않음)의 마지막 줄에서 다음 envir = .GlobalEnv
이 기본이며 생략 될 수있다.
2) 또 다른 방법은 표시된대로 env
의 개체 이름을 반복하는 것입니다. verbose
인수를 사용하여 수행중인 작업을 표시하고 dryrun
인수를 사용하여 실제로 제거하지 않고 제거 할 내용을 표시합니다.
rm2 <- function(env = .GlobalEnv, verbose = FALSE, dryrun = FALSE, all.names = FALSE) {
for(nm in ls(env, all.names = all.names)) {
obj <- get(nm, env)
if (is.data.frame(obj) && ncol(obj) < 3) {
if (verbose || dryrun) cat("removing", nm, "\n")
if (!dryrun) rm(list = nm, envir = env)
}
}
}
rm2(dryrun = TRUE)
rm2(verbose = TRUE)
업데이트에 rm
에 추가 envir
인수 (1). 그것은 이미 (2)에있었습니다.
업데이트 2 (2)에 대한 부수적 인 내용.
'sapply' 또는'lapply'로 시도하십시오. 'apply'는'matrix'와 마진을 기다리는 것입니다 (행 방향으로 1, 열 방향으로 2). 또한, 실제 객체의'dim '을 테스트하기 위해'get'을 추가해야합니다. 이름뿐 아니라 환경을 지정할 필요가 있습니다. – Cath
'mget (ls())을 사용해야 할 수도 있습니다. '그런 다음 조건을 사용하여 그것이 data.frame인지 확인하고 'lapply'를 사용하여 목록에 3 개 이상의 변수가 있는지 확인하십시오. 이름을 알아 내고'rm (list = .., envir = .GlobalEnv)'을 사용하십시오. – akrun
@GPierre 비슷한 질문이 RichardScriven에 의해 최근에 응답되었습니다. 차이점 만 치수 검사를 포함합니다. 이 링크를 확인하십시오 http://stackoverflow.com/questions/28142088/how-to-exclude-only-the-data-frames-from-the-global-environment-in-r/28142128#28142128 – akrun