다른 문제를 해결하기 위해 노력하는 동안이 문제가 발생했습니다.
다음과 같이 모든 R 객체를 제거 할 수 있습니다.
rm(list = ls(all = TRUE))
작업 세션 중에 설치된 패키지를 분리 할 수있는 동등한 명령이 있습니까?
> sessionInfo()
R version 2.12.2 (2011-02-25)
Platform: i386-pc-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=English_United States.1252
[2] LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
필요 (ggplot2)
Loading required package: ggplot2
Loading required package: reshape
Loading required package: plyr
Attaching package: 'reshape'
The following object(s) are masked from 'package:plyr':
round_any
Loading required package: grid
Loading required package: proto
sessionInfo ()
R version 2.12.2 (2011-02-25)
Platform: i386-pc-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=English_United States.1252
[2] LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] grid stats graphics grDevices utils datasets methods
[8] base
other attached packages:
[1] ggplot2_0.8.9 proto_0.3-9.1 reshape_0.8.4 plyr_1.4
글로벌 솔루션이 아니더라도 이런 식으로 시도했습니다.
pkg <- c("package:ggplot2_0.8.9", "package:proto_0.3-9.1", "package:reshape_0.8.4", "package:plyr_1.4")
detach(pkg, character.only = TRUE)
Error in detach(pkg, character.only = TRUE) : invalid 'name' argument
In addition: Warning message:
In if (is.na(pos)) stop("invalid 'name' argument") :
the condition has length > 1 and only the first element will be used
내가 찾는 것은 다음과 같은 글로벌 것입니다.
rm(list = ls(all = TRUE))
객체의 경우 첨부 된 기본 패키지를 제거하지 않을 것으로 예상됩니다.
감사;
답변
따라서 누군가는 다음과 같이 간단히 대답해야합니다.
lapply(paste('package:',names(sessionInfo()$otherPkgs),sep=""),detach,character.only=TRUE,unload=TRUE)
(편집 : 6-28-19) R 3.6.0의 최신 버전에서는 대신 사용하십시오.
invisible(lapply(paste0('package:', names(sessionInfo()$otherPkgs)), detach, character.only=TRUE, unload=TRUE))
invisible (*)을 사용할 필요는 없지만 NULL 응답이 R 창에 수직으로 스팸을 보내는 것을 방지하는 데 유용 할 수 있습니다.
(편집 : 2019 년 9 월 20 일) 버전 3.6.1에서
로드 names(sessionInfo()$loadedOnly)
된 패키지 만 명시 적으로 첨부 된 패키지로 먼저 변환 한 다음 패키지를 분리하는 것이 도움이 될 수 있습니다 .
lapply(names(sessionInfo()$loadedOnly), require, character.only = TRUE)
invisible(lapply(paste0('package:', names(sessionInfo()$otherPkgs)), detach, character.only=TRUE, unload=TRUE, force=TRUE))
$ basePkgs를 통해 기본 패키지를 언로드하고 unloadNamespace(loadedNamespaces())
. 그러나 이들은 일반적으로 오류로 가득 차 있으며 오류 sessionInfo()
만 반환하는 것과 같은 기본 기능을 손상 시킬 수 있습니다. 이는 일반적으로 원래 패키지 디자인의 가역성이 부족하기 때문에 발생합니다. timeDate
예를 들어 현재 는 돌이킬 수 없게 중단 될 수 있습니다.
답변
이것을 시도하십시오 :
detachAllPackages <- function() {
basic.packages <- c("package:stats","package:graphics","package:grDevices","package:utils","package:datasets","package:methods","package:base")
package.list <- search()[ifelse(unlist(gregexpr("package:",search()))==1,TRUE,FALSE)]
package.list <- setdiff(package.list,basic.packages)
if (length(package.list)>0) for (package in package.list) detach(package, character.only=TRUE)
}
detachAllPackages()
답변
당신은 가까웠습니다. ?detach
의 첫 번째 인수 name
에 대해 무엇 을 말해야 하는지 주목하십시오 detach()
.
인수 :
name: The object to detach. Defaults to ‘search()[pos]’. This can be an unquoted name or a character string but _not_ a character vector. If a number is supplied this is taken as ‘pos’.
따라서 우리 detach()
는의 요소 당 한 번씩 반복적으로 호출해야합니다 pkg
. 이 작업을 수행하기 위해 지정해야하는 몇 가지 다른 인수가 있습니다. 첫 번째는 character.only = TRUE
함수가 name
문자열 이라고 가정 할 수있게 해주는 이며 , 문자열 없이는 작동하지 않습니다. 둘째, 관련된 네임 스페이스를 언로드 할 수도 있습니다. 를 설정하면 unload = TRUE
됩니다. 따라서 해결책은 다음과 같습니다.
pkg <- c("package:vegan","package:permute")
lapply(pkg, detach, character.only = TRUE, unload = TRUE)
다음은 전체 예입니다.
> require(vegan)
Loading required package: vegan
Loading required package: permute
This is vegan 2.0-0
> sessionInfo()
R version 2.13.1 Patched (2011-09-13 r57007)
Platform: x86_64-unknown-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_GB.utf8 LC_NUMERIC=C
[3] LC_TIME=en_GB.utf8 LC_COLLATE=en_GB.utf8
[5] LC_MONETARY=C LC_MESSAGES=en_GB.utf8
[7] LC_PAPER=en_GB.utf8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_GB.utf8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods
[7] base
other attached packages:
[1] vegan_2.0-0 permute_0.7-0
loaded via a namespace (and not attached):
[1] grid_2.13.1 lattice_0.19-33 tools_2.13.1
> pkg <- c("package:vegan","package:permute")
> lapply(pkg, detach, character.only = TRUE, unload = TRUE)
[[1]]
NULL
[[2]]
NULL
> sessionInfo()
R version 2.13.1 Patched (2011-09-13 r57007)
Platform: x86_64-unknown-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_GB.utf8 LC_NUMERIC=C
[3] LC_TIME=en_GB.utf8 LC_COLLATE=en_GB.utf8
[5] LC_MONETARY=C LC_MESSAGES=en_GB.utf8
[7] LC_PAPER=en_GB.utf8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_GB.utf8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods
[7] base
loaded via a namespace (and not attached):
[1] grid_2.13.1 lattice_0.19-33 tools_2.13.1
이것을 함수로 바꾸고 싶다면, sessionInfo()
“다른 첨부 된 패키지 :”라는 레이블을 어떻게 식별하는지 코드 를 살펴보십시오. 이 코드와 위의 아이디어를 하나의 기능으로 결합하면 집에 있고 건조합니다. 그래도 그 부분은 당신에게 맡기겠습니다.
답변
nothing
Romain François에서 제공하는 솔루션을 추가하는 것이 좋습니다. nothing
현재 GitHub 에서 사용할 수 있는 패키지를로드하면로드 된 모든 패키지 를 언로드합니다. Romain이 제공하는 예에서와 같이 :
loadedNamespaces()
[1] "base" "datasets" "grDevices" "graphics" "methods" "stats"
[7] "utils"
require(nothing, quietly = TRUE)
loadedNamespaces()
[1] "base"
설치
devtools
패키지 사용시 :
devtools::install_github("romainfrancois/nothing")
pacman
대체 접근 방식은 pacman
CRAN을 통해 사용 가능한 패키지를 사용 합니다.
pacman::p_unload(pacman::p_loaded(), character.only = TRUE)
답변
Gavin의 대답을 기반으로하지만 완전한 기능은 아니지만 다음 시퀀스가 될 것입니다.
sess.pkgs <- function (package = NULL)
{ z <- list()
if (is.null(package)) {
package <- grep("^package:", search(), value = TRUE)
keep <- sapply(package, function(x) x == "package:base" ||
!is.null(attr(as.environment(x), "path")))
package <- sub("^package:", "", package[keep])
}
pkgDesc <- lapply(package, packageDescription)
if (length(package) == 0)
stop("no valid packages were specified")
basePkgs <- sapply(pkgDesc, function(x) !is.null(x$Priority) &&
x$Priority == "base")
z$basePkgs <- package[basePkgs]
if (any(!basePkgs)) {
z$otherPkgs <- package[!basePkgs]
}
z
}
lapply(paste("package:",sess.pkgs()$otherPkgs, sep=""), detach,
character.only = TRUE, unload = TRUE)
답변
또는 RStudio가있는 경우 패키지 탭의 모든 확인란을 선택 취소하여 분리하십시오.
답변
#Detach all packages
detachAllPackages <- function() {
basic.packages <- c("package:stats","package:graphics","package:grDevices","package:utils","package:datasets","package:methods","package:base")
package.list <- search()[ifelse(unlist(gregexpr("package:",search()))==1,TRUE,FALSE)]
package.list <- setdiff(package.list,basic.packages)
if (length(package.list)>0) for (package in package.list) detach(package, character.only=TRUE)
}
detachAllPackages()
이렇게하면 모든 패키지가 기본 패키지와 분리되어 있는지 확인할 수 있습니다.