تثبيت جميع حزم القرور التي لم يتم تثبيتها بالفعل؟

StackOverflow https://stackoverflow.com/questions/2169118

  •  24-09-2019
  •  | 
  •  

سؤال

ستقوم أوامر R التالية بتثبيت جميع حزم الرافعة:

availablePackages <- available.packages()[,1]
install.packages(availablePackages)

وسيقوم الأمر التالي بإدراج جميع الحزم المثبتة:

installedPackages <- .packages(all.available = TRUE)

سؤالي هو: كيف يمكنني تعليمات R إلى تثبيت جميع حزم القحف التي لم يتم تثبيتها بالفعل؟

هل كانت مفيدة؟

المحلول

بصراحة ، أعتقد أنها وظيفة مضنية ... ستستمر لعدة أيام ، وحتى أسابيع (اعتمادًا على الموارد) ، ولكن هذا هو الكود (أستمتع فقط بعمل أشياء تافهة):

# get names of installed packages
packs <- installed.packages()
exc <- names(packs[,'Package'])

# get available package names
av <- names(available.packages()[,1])

# create loooong string
ins <- av[!av %in% exc]
install.packages(ins)

ما زلت لا أفهم لماذا تفعل هذا ، ولكن ، مهلا ... بعض الأشياء لا يُقصد بها أن تكون .... ما يعجبني أكثر هو حقيقة أنك قد أجبت بالفعل على سؤالك! لقد حصلت على ما تحتاجه ، ويعود الأمر لك فقط لوضع الأشياء معًا ... هل نفتقد هذه النقطة؟ هل كان لديك شيء آخر في الاعتبار؟!؟

نصائح أخرى

1) لماذا تريد أن تفعل ذلك؟ هناك أكثر من 3500 (اعتبارا من فبراير 2012) منهم؟

2) هل نظرت إلى وجهات نظر المهمة كران و ال CTV الحزمة التي تتيح لك تثبيت الحزم من مهمة معينة؟

3) أنت السؤال الجريء الوجه هو استعلام فهرسة بسيط يمكنك القيام به باليد (وإلى جانب ذلك ، انظر أيضًا help(sets))

R> available <- LETTERS                  # a simple set
R> installed <- LETTERS[c(1:10, 15:26)]  # a simple subset
R> available[ ! available %in% installed ]
[1] "K" "L" "M" "N"
R> 

تعديل: ردا على متابعتك:

أ) إذا لم تمر الحزمة "فحص R CMD" على Linux و Windows ، فلن يتم تحميلها على Cran. حتى يتم تنفيذ هذه الوظيفة.

ب) الحصول على كل يعتمد في نهايتك هو العمل أيضًا كما سترى. لقد فعلنا ذلك من أجل cran2deb http://debian.cran.r-project.org (الذي يقوم ببناء حزم دبيان الكامل والذي يعد أكثر من مجرد تثبيت). نحصل على حوالي 2050 من 2150 حزمة بنيت. هناك عدد قليل من نرفض البناء بسبب الترخيص ، وبعضنا لا نستطيع بسبب الرؤوس المفقودة أو libs وعدد قليل لا يمكننا أن نبني لأنهم بحاجة إلى حزم الموصل الحيوي.

اكتب هذا الأمر ثم سيتم تثبيت جميع الحزم تلقائيًا:

install.packages(available.packages()[,1])

لقد اختبرت هذا وهو يعمل

availablePackages=available.packages()
availablePackages<-as.vector(availablePackages[,1])
installedPackages=.packages(all.available = TRUE)
missedPackages<-setdiff(availablePackages, installedPackages)
for (i in 1:length(missedPackages))
{
pkgName <- missedPackages[i]
install.packages(pkgName)
}
print("END")

يعتبر

أفضل إذا كنت تستخدم:

    check.and.install.Package<-function(package_name){
        if(!package_name%in%installed.packages()){
           install.packages(package_name)
        }
     }

اتصل بالوظيفة وتحقق إذا تم تثبيت الحزمة المطلوبة:

    check.and.install.Package("pkgName")
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top