한 번에 여러 패키지 로드
require 명령을 반복해서 입력하지 않고 패키지 묶음을 한 번에 로드하려면 어떻게 해야 합니까?저는 세 가지 접근법을 시도했는데, 모두 충돌하고 타는 것입니다.
기본적으로 패키지 이름의 벡터를 로드할 함수에 제공하고 싶습니다.
x<-c("plyr", "psych", "tm")
require(x)
lapply(x, require)
do.call("require", x)
제안된 함수의 여러 순열이 작동합니다. 그러나 다음을 지정하는 경우에만 가능합니다.character.only
의 주장TRUE
간단한 예:
lapply(x, require, character.only = TRUE)
제가 관리하는 CRAN 패키지 팩맨(Dason Kurkiewicz와 함께 작성)은 다음을 달성할 수 있습니다.
따라서 사용자는 다음을 수행할 수 있습니다.
## install.packages("pacman")
pacman::p_load(dplyr, psych, tm)
그리고 만약 소포가 없어진다면.p_load
CRAN 또는 바이오컨덕터에서 다운로드합니다.
이렇게 하면 효과가 있습니다.
lapply(x, FUN = function(X) {
do.call("require", list(X))
})
(핵심 비트는args
에 있어서의 논쟁.do.call(what, args)
--- 단일 요소만 포함하더라도 목록이어야 합니다!)
저는 @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 노트북을 사용한다고 가정합니다.invisible()
함수는 목록 개체의 내용을 억제하고 렌더링된 노트북 파일의 혼란을 방지합니다.
패키지를 동시에 설치하고 로드하려는 사람을 위해 이 링크에서 이 기능을 발견했습니다.
# 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
(하드웨어 설치).가장 직관적인 방법으로 패키지를 로드할 수 있습니다.
library("easypackages")
libraries("plyr", "psych", "tm")
패키지에는 여러 패키지를 설치하는 기능도 포함되어 있습니다.
packages("plyr", "psych", "tm")
여기 참조.
당신은 간단히 루브리팩 패키지를 사용할 수 있고 그것은 새로운 패키지를 깔끔하게 설치한 후 한 줄로 모두 로드합니다.
lubripack("plyr", "psych", "tm")
다음은 RStudio에서 위의 코드를 실행한 후의 출력입니다.
패키지 설치 방법:
아래 코드를 실행하여 GitHub에서 패키지를 다운로드하고 설치합니다.GitHub 계정을 가질 필요가 없습니다.
library(devtools)
install_github("espanta/lubripack")
목록을 입력으로 지정하지 않으려면 daroczig의 솔루션을 기반으로 합니다.
# Foo
mLoad <- function(...) {
sapply(sapply(match.call(), as.character)[-1], require, character.only = TRUE)
}
# Example
mLoad(plyr, dplyr, data.table)
보다 짧은.
lapply(list('plyr', 'dplyr', 'data.table'), require, character.only = TRUE)
다음 기능을 사용합니다.
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)
}
로드를 시도하고 실패하면 설치한 후 다시 로드를 시도합니다.
팩맨을 설치하고 로드하기 위한 검사를 추가하기 위한 타일러 링커의 약간의 답변:
#Install/load pacman
if(!require(pacman)){install.packages("pacman");require(pacman)}
#Install/load tons of packages
p_load(plyr,psych,tm)
p_load 솔루션은 견적을 피할 수 있어서 좋습니다!
언급URL : https://stackoverflow.com/questions/8175912/load-multiple-packages-at-once
'programing' 카테고리의 다른 글
R의 전역 및 국소 변수 (0) | 2023.06.14 |
---|---|
날짜별 MySQL 순서 결과 및 사용자 ID별 그룹화 (0) | 2023.06.14 |
Itunes에 전달한 후 Firebase에서 "누락 알림 권한" 문제가 발생함 (0) | 2023.06.14 |
루비: 해시를 HTTP 매개 변수로 변환하는 방법은? (0) | 2023.06.14 |
XLSX(Excel)에서 읽는 방법? (0) | 2023.06.14 |