답변:
제안 된 함수의 여러 순열은 작동하지만 character.only
인수를로 지정하는 경우에만 작동 합니다 TRUE
. 빠른 예 :
lapply(x, require, character.only = TRUE)
x
.
lapply
트릭을 네이티브에 추가했다면 좋을 것 library()
입니다. 말할 수있게 되십시오 :library(c("plyr", "umx"))
내가 유지하는 CRAN 패키지 팩맨 (Dason Kurkiewicz와 함께 작성)은 다음을 수행 할 수 있습니다.
따라서 사용자는 다음을 수행 할 수 있습니다.
## install.packages("pacman")
pacman::p_load(dplyr, psych, tm)
패키지가 없으면 p_load
CRAN 또는 Bioconductor에서 다운로드합니다.
p_load
습니까? load_packages
함수의 의도를보다 명확하게하는 것과 같이보다 설명적인 이름 입니다.
p_
. 또한 우리는 라이브러리를 조금 사용하는 경향이 있으며 추가로 7 자입니다. 7 자 x ~ 1000000 수명 사용 기능 x 문자 당 0.5 초 = 3500000 초 즉 우리의 목표 2 월 1 크랑에 밀어 어떤 경우에도 우리는 그들에게 다시 준 58333.33 분, 972.2222 시간 프로그래머의 삶의 40.50926 일을 :-)입니다
p_
접두사에 대한 당신의 근거는 다소 모호합니다. 간결함이 문제인 경우 p_
접두사를 완전히 제거하십시오 . 사실, 그러한 접두사를 갖는 것은 일반적으로 다른 언어로 권장되지 않습니다 (저는 Hadley에게 fct_
Forcats의 무의미한 점과 동일 하다고 말했습니다). 이 패키지의 의도 된 용도가 정규화 된 네임 스페이스 ( )를 사용하기 때문에 특히 그렇습니다 pacman::
.
동시에 패키지를 설치하고로드하려는 사람을 위해이 링크 에서이 기능을 발견했습니다.
# ipak function: install and load multiple R packages.
# check to see if packages are installed. Install them if they are not, then load them into the R session.
ipak <- function(pkg){
new.pkg <- pkg[!(pkg %in% installed.packages()[, "Package"])]
if (length(new.pkg))
install.packages(new.pkg, dependencies = TRUE)
sapply(pkg, require, character.only = TRUE)
}
# usage
packages <- c("ggplot2", "plyr", "reshape2", "RColorBrewer", "scales", "grid")
ipak(packages)
다른 옵션은 패키지에서 제공됩니다 easypackages
. 일단 설치되면 가장 직관적 인 방법으로 패키지를로드 할 수 있습니다.
libraries("plyr", "psych", "tm")
패키지에는 여러 패키지를 설치하는 기능도 포함되어 있습니다.
packages("plyr", "psych", "tm")
library
기능 에서 "라이브러리" 는 패키지가 설치된 위치 ( 패키지 라이브러리)를 나타 냅니다. 통해 여러 패키지를로드하는 것은 libraries
의미가 없습니다. 다른 기능 packages
을 수행 하는 별도의 기능 이 있으면 더 악화됩니다. 이름은 소프트웨어 엔지니어링에서 어려운 문제이지만 실제로는 문제라는 것을 알고 있습니다. 이 이름은 특히 나쁩니다.
libraries
이 의미가 없다는 것에 동의하지 않는다 . 그것은 복수의 library
과 library
부하를 하나의 패키지를; libraries
복수의 패키지를로드한다. library
"단일 라이브러리에서로드"를 의미 하는 것으로 생각 하고 libraries
이를 "여러 라이브러리에서로드" 를 의미 하도록 확장하는 경우 이는 직관적이지 않을 수 있지만 의도는 아닙니다. 나는 그 이름에 매우 만족할 것이다 libraries
.
lubripack 패키지를 사용하면 새 패키지를 깔끔하게 설치 한 다음 모든 패키지를 한 줄에로드 할 수 있습니다.
lubripack("plyr", "psych", "tm")
RStudio에서 위의 코드를 실행 한 후의 결과는 다음과 같습니다.
아래 코드를 실행하여 패키지를 다운로드하고 GitHub에서 설치하십시오. GitHub 계정이 없어도됩니다.
library(devtools)
install_github("espanta/lubripack")
다음 기능을 사용합니다.
mrip <- function(..., install = TRUE){
reqFun <- function(pack) {
if(!suppressWarnings(suppressMessages(require(pack, character.only = TRUE)))) {
message(paste0("unable to load package ", pack,
": attempting to download & then load"))
install.packages(pack)
require(pack, character.only = TRUE)
}
}
lapply(..., reqFun)
}
로드를 시도하고 설치에 실패하면 다시로드하십시오.
I는 @daroczig가 대체함으로써 개선 될 수있는 것을 제공하는 코드 생각 require
으로 library
상기 포장 lapply
내부 통화 invisible()
기능. 따라서 개선 된 코드는 다음과 같습니다.
invisible(lapply(x, library, character.only = TRUE))
이 코드는 다음과 같은 이유로 개선되었습니다.
library()
require()
패키지가 설치되지 않은 경우 오류가 발생하고 후자는 경고 만 표시하므로 패키지를로드 하는 데 일반적으로 선호 됩니다. 또한을 require()
호출 library()
하므로 library()
직접 사용하지 마십시오 !
library("time")
# Error in library("time") : there is no package called ‘time’
require("time")
# Loading required package: time
# Warning message:
# In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE, :
# there is no package called ‘time’
lapply()
이 경우 호출에 의해 리턴되고 인쇄 된 목록 오브젝트는 의미가 없으므로 출력을 보이지 않게하는 것이 좋습니다. 분석 작업에 R Notebook을 사용한다고 가정하면이 invisible()
기능을 사용 하면 목록 개체의 내용이 표시되지 않고 렌더링 된 노트북 파일의 혼란을 막을 수 있습니다.