একবারে একাধিক প্যাকেজ লোড করুন


174

বার বার প্রয়োজনীয় কমান্ডটি পুনরায় টাইপ করে আমি কীভাবে একবারে একগুচ্ছ প্যাকেজ লোড করতে পারি? আমি তিনটি পদ্ধতির চেষ্টা করেছি যার সবগুলি ক্র্যাশ এবং জ্বলছে।

মূলত, আমি কোনও ফাংশনে প্যাকেজ নামের ভেক্টর সরবরাহ করতে চাই যা এগুলি লোড করবে।

x<-c("plyr", "psych", "tm")

require(x)
lapply(x, require)
do.call("require", x)

উত্তর:


251

আপনার প্রস্তাবিত ফাংশনগুলির বেশ কয়েকটি ক্রিয়াকলাপ কাজ করে - তবে আপনি যদি character.onlyযুক্তিটি নির্দিষ্ট করেন তবেই TRUE। দ্রুত উদাহরণ:

lapply(x, require, character.only = TRUE)

@ টমি ও দারোকজিগ - দুর্দান্ত এটি একটি অনেক ক্লিনার সমাধান। আমি কেবল উত্তরসূরিদের জন্যই ছেড়ে দেব, এবং কেন এটি অপের প্রচেষ্টা চালায়নি সে সম্পর্কে কী দেখায়।
জোশ ও'ব্রায়েন

4
আপনি আংশিক চরিত্র ম্যাচিং সদ্ব্যবহার এবং (এক্স, প্রয়োজন, CH = টি) বা এমনকি lapply (এক্স, প্রয়োজন, গ = টি) lapply পার পেয়ে যাবে
Dason

@daroczig এই কোডটি প্যাকেজগুলি লোড করে তবে কেন এটি নিম্নলিখিত সতর্কতা বার্তা দেয়: 1: লাইব্রেরিতে (প্যাকেজ, lib.loc = lib.loc, চরিত্র.অনলি = সত্য, লজিকাল.রেটন = সত্য,: প্যাকেজ বলে কিছু নেই) 'x' 2: যদি ((লোডযুক্ত) {:
শর্তটির

@ আনুশা: আমার কোনও ধারণা এটিএম নেই, আপনার xকী আছে ?
দারোকজিগ

23
আর :: বেস যদি এই lapplyকৌশলটি দেশীয়তে যুক্ত করে তবে ভাল হন library()। বলতে পেরে দুর্দান্ত হোন:library(c("plyr", "umx"))
টিম

58

আমি যে সিআরএএন প্যাকেজ প্যাকম্যানটি রক্ষণ করি (ডেসন কুরকিউইকস দ্বারা রচিত) এটি সম্পাদন করতে পারে:

সুতরাং ব্যবহারকারী তা করতে পারে:

## install.packages("pacman")
pacman::p_load(dplyr, psych, tm) 

এবং যদি প্যাকেজটি অনুপস্থিত থাকে তবে p_loadএটি CRAN বা বায়োকন্ডাক্টর থেকে ডাউনলোড করবে।


7
+1 টি! আপনি সংক্ষিপ্ত নামটি কেন বেছে নিয়েছিলেন p_load? আরও বর্ণনামূলক নাম যেমন load_packagesফাংশনের উদ্দেশ্য আরও সুস্পষ্ট করে তোলে।
পল হিমস্ট্র্রা

19
কারণ পি মানে প্যাকেজ। দরকারী এবং রফতানিযোগ্য প্যাকেজের প্রতিটি ফাংশন শুরু হয় p_। এছাড়াও আমরা লাইব্রেরিটি কিছুটা ব্যবহার করি এবং এটি অতিরিক্ত 7 টি অক্ষর। 7 টি অক্ষর x ~ 1000000 লাইফ টাইম ফাংশনটি x .5 সেকেন্ডে প্রতি চরিত্রের ব্যবহার = 3500000 সেকেন্ড। এটি 58333.33 মিনিট, 972.2222 ঘন্টা বা 40.50926 দিনের প্রোগ্রামার জীবনের আমরা তাদের ফিরিয়ে দিয়েছি :-) যে কোনও ইভেন্টে আমাদের লক্ষ্য 1 ফেব্রুয়ারির মধ্যে সিআরএএন-তে এগিয়ে যাওয়া
টাইলার রিঙ্কার

3
প্রায় এক বছর দেরি হলেও আমরা শেষ পর্যন্ত CRAN এ জমা দিয়েছি। কয়েক দিনের মধ্যে আপ করা উচিত। @ ট্রিঙ্কার (বা আমার) এটি সর্বজনীন হয়ে যাওয়ার পরে এটি পরিবর্তন করতে ভুলবেন না।
Dason

5
@ টাইলার আমি জানি আমি কয়েক বছর দেরি করেছি তবে আমি আপনার উপস্থাপনাটি p_সন্দেহজনক হিসাবে খুঁজে পাই । যদি তৃষ্ণার সমস্যা হয় তবে p_উপসর্গটি পুরোপুরি সরিয়ে ফেলুন । প্রকৃতপক্ষে, এই জাতীয় উপসর্গগুলি সাধারণত অন্যান্য কারণে ভাল কারণে নিরুৎসাহিত করা হয় (আমি fct_হ্যাডলিকে বলেছিলাম যে তারা নরকতাদের ক্ষেত্রে তার বাজে কথা বলে থাকে)। এটি বিশেষত সত্য, যেহেতু প্যাকেজটির অভিযুক্ত ব্যবহারটি একটি যোগ্য নেমস্পেস ( pacman::) সহ is
কনরাড রুডল্ফ

5
@ টাইলার রিঙ্কার এই বিষয়টিতে যুদ্ধাত্মক হওয়ার জন্য ক্ষমা চেয়েছেন, তবে আমি সত্যিই মনে করি যে এখানে আর সম্প্রদায়টি কেবলই ভুল, এবং কার্যত অন্য প্রতিটি আধুনিক ভাষা এটি সঠিকভাবে পেয়েছে: আপনি বলেছিলেন যে "এই স্থানটির নাম বিরোধের বিরুদ্ধে এই রক্ষীরা।" - তবে এটিই নামস্থানগুলির জন্য! প্যাকেজ লেখকদের উপর কাজটি হ'ল লোককে প্যাকেজগুলি সঠিকভাবে ব্যবহার করতে শিক্ষিত করা, তাদের ঝাঁকুনির প্রোগ্রামিং অনুশীলনের সাথে সামঞ্জস্য না করা।
কনরাড রুডলফ

24

এই কৌতুক করতে হবে:

lapply(x, FUN = function(X) {
    do.call("require", list(X)) 
})

(মূল বিটিটি হ'ল argsযুক্তিটি do.call(what, args) অবশ্যই একটি তালিকা হতে পারে --- এমনকি যদি এটির একটিমাত্র উপাদান থাকে তবে!)


16

যে কেউ একই সাথে প্যাকেজ ইনস্টল ও লোড করতে চায় আমি তার জন্য এই লিঙ্কটি থেকে এই ফাংশনটি জুড়ে এসেছি

# 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)

হ্যালো আমি আপনার প্রদত্ত স্নিপেট থেকে একটি আর ফাইল তৈরি করেছি। যখন আমি সেই স্ক্রিপ্টটি অ্যামাজন ইএমআর পরিষেবাতে চালিত করি তবে এটি আমাকে নিম্নলিখিত ইউআরএলে উল্লিখিত আউটপুট দেয়। pastie.org/10402378#3,10-11,13
রুবিন পোরওয়াল

9

একটি বিকল্প বিকল্প প্যাকেজ থেকে আসে easypackages। একবার ইনস্টল হয়ে গেলে আপনি অতি স্বজ্ঞাত উপায়ে প্যাকেজগুলি লোড করতে পারেন:

libraries("plyr", "psych", "tm")

বিভিন্ন প্যাকেজ ইনস্টল করার জন্য প্যাকেজটিতে একটি ফাংশনও রয়েছে:

packages("plyr", "psych", "tm")

এখানে রেফারেন্স ।


ফাংশনটির নাম বরং বিভ্রান্ত / বিভ্রান্ত। "লাইব্রেরি", libraryফাংশনে, প্যাকেজ ইনস্টল করা হয় যেখানে অবস্থান বোঝায়: প্যাকেজ লাইব্রেরি । বেশ কয়েকটি প্যাকেজ লোড করে librariesবোঝা যায় না। একটি পৃথক ফাংশন থাকা packagesযা অন্য কিছু করে কেবল এটিকে আরও খারাপ করে। আমি জানি সফটওয়্যার ইঞ্জিনিয়ারিংয়ে নামকরণ একটি কঠিন সমস্যা তবে সত্যই। এই নামগুলি বিশেষত খারাপ।
কনরাড রুডল্ফ

2
@ কনরাড রুডল্ফ এই নামটির librariesকোনও মানে নেই বলে আমি একমত নই । এটি বহুবচন library, এবং libraryএকক প্যাকেজ লোড করে; librariesপ্যাকেজগুলির বহুবচনতা লোড করে। যদি আপনি library"আপনার একক গ্রন্থাগার থেকে বোঝা" অর্থ হিসাবে বিবেচনা করেন এবং এর librariesঅর্থ "একাধিক গ্রন্থাগার থেকে লোড" অর্থায় প্রসারিত করেন , তবে এটি সম্ভবত অনর্থক, তবে এটি উদ্দেশ্য নয়; নামটি নিয়ে আমি বেশ খুশি হব libraries
জ্যামি এস

@ জ্যামিএস তবে এটি এখনও (সাধারণত) একটি লাইব্রেরি থেকে লোড হচ্ছে। আপনি লাইব্রেরি এবং প্যাকেজকে বিভ্রান্ত বলে মনে করছেন (যা ন্যায্য বলে, এটি আর এ সাধারণ হয়ে উঠেছে): "আর লাইব্রেরি", আমার আগের মতামত অনুসারে, স্থান (গুলি) (ডিরেক্টরি / ডিরেক্টরি) যেখানে আর প্যাকেজ ইনস্টল করা আছে তা বোঝায় । এই উত্তরের উদাহরণে, "প্লাইয়ার", "সাইক" এবং "টিএম" লাইব্রেরি নয় : এগুলি প্যাকেজ।
কনরাড রুডলফ

4

আপনি কেবল লুব্রিপ্যাক প্যাকেজটি ব্যবহার করতে পারেন এবং এটি খুব সুন্দরভাবে নতুন প্যাকেজ ইনস্টল করে এবং তারপরে সেগুলি সমস্ত একটি লাইনে লোড করুন।

lubripack("plyr", "psych", "tm")

আরস্টুডিওতে আপনি কোডের উপরে চলে যাওয়ার পরে এখানে আউটপুট।

এখানে চিত্র বর্ণনা লিখুন

কীভাবে প্যাকেজ ইনস্টল করবেন:

প্যাকেজটি ডাউনলোড করতে কোডটি নীচে চালান এবং এটি গিটহাব থেকে ইনস্টল করুন। গিটহাব অ্যাকাউন্ট দরকার নেই।

library(devtools)
install_github("espanta/lubripack")

5
আমি অনুমান করব পাঠ্যের পরিবর্তে চিত্রগুলি ব্যবহার করব
আনফুন বিড়াল

3
এটি ইতিমধ্যে উত্তর না দেওয়া উপায়ে প্রশ্নের উত্তর দেয় না এবং বেশিরভাগই নিজের প্রচার হয় বলে মনে হয়।
টাইলার রিঙ্কার

আপনি ঠিক বলেছেন, আমি স্পষ্ট করে প্রশ্নের উত্তর দেওয়ার চেষ্টা করেছি। এটি প্রশ্নের উত্তর হতে পারে আশা করে এটি সুস্পষ্ট করে তুলুন।
এস্পান্ত

@TylerRinker এখন কেমন আছে?
এস্পান্ত

3

দারোকজিগের সমাধানে বিল্ডিং, আপনি যদি কোনও তালিকা ইনপুট হিসাবে নির্দিষ্ট করতে না চান তবে ব্যবহার করতে পারেন

# 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)

2

আমি নিম্নলিখিত ফাংশন ব্যবহার:

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)
}

এটি লোড করার চেষ্টা করে এবং এটি ইনস্টল করতে ব্যর্থ হলে এবং আবার লোড করার চেষ্টা করুন।


2

আমি মনে করি যে @aroczig যে কোড সরবরাহ করেছে সেটি এর requireসাথে প্রতিস্থাপন করে libraryএবং ফাংশনের lapplyঅভ্যন্তরে কলটি মোড়ানো দ্বারা উন্নত করা যেতে পারে invisible()। সুতরাং, উন্নত কোডটি নিম্নলিখিতগুলির মতো দেখাবে:

invisible(lapply(x, library, character.only = TRUE))

এই কোডটি উন্নত হয়েছে কারণ:

  1. 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’
  2. lapply()কলটি দ্বারা ফিরে আসা এবং মুদ্রিত তালিকার বিষয়টি এই ক্ষেত্রে অর্থবহ নয়, সুতরাং আউটপুটটিকে অদৃশ্য করে তোলে তা বোঝা যায়। বলুন যে আপনি আপনার বিশ্লেষণের কাজের জন্য আর নোটবুক ব্যবহার করেন, invisible()ফাংশনটি ব্যবহার করে তালিকার অবজেক্টের বিষয়বস্তু দমন করা হবে এবং রেন্ডার নোটবুকের ফাইলটিতে বিশৃঙ্খলা রোধ করা হবে।


1

প্যাকম্যান ইনস্টল ও লোড করতে একটি চেক যোগ করতে টাইলার রিঙ্কারের উত্তরের হালকা মোড:

#Install/load pacman
if(!require(pacman)){install.packages("pacman");require(pacman)}
#Install/load tons of packages
p_load(plyr,psych,tm)

আমি পি_লোড সমাধানটি পছন্দ করি কারণ এটি উদ্ধৃতি এড়ানো যায়!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.