Có cách nào đơn giản để có danh sách các gói phụ thuộc R (tất cả phụ thuộc đệ quy) cho gói nhất định, không cài đặt gói và phụ thuộc không? Một cái gì đó tương tự như một cài đặt giả trong portupgrade hoặc apt.Liệt kê R Gói phụ thuộc mà không cần cài đặt gói
Trả lời
Bạn có thể sử dụng kết quả của hàm available.packages
. Ví dụ, để xem những gì ggplot2
phụ thuộc vào:
pack <- available.packages()
pack["ggplot2","Depends"]
Mà cho:
[1] "R (>= 2.14), stats, methods"
Lưu ý rằng tùy thuộc vào những gì bạn muốn đạt được, bạn có thể cần phải kiểm tra lĩnh vực Imports
, quá.
Cool - I luôn muốn tìm hiểu về các công cụ tiện dụng. Đáng buồn thay, điều này sẽ không làm việc cho những người trong chúng ta bị mắc kẹt sau một bức tường lửa của công ty. Chúng tôi có thể bị mắc kẹt khi làm một việc gì đó như 'browseURL ('http://cran.r-project.org/web/packages/package.name')' –
Cảm ơn, điều đó đã giúp ích rất nhiều, tôi đã thay đổi phạm vi câu hỏi một chút, nhưng bằng cách đệ quy tìm kiếm danh sách Phụ thuộc và Nhập khẩu, tôi đã có sẵn để xây dựng một danh sách đầy đủ. –
@CarlWitthoft nếu bạn đang sử dụng các cửa sổ, 'setInternet2()' có thể hữu ích. – hadley
Tôi chưa cài đặt R và tôi cần tìm hiểu xem R Packages nào là phụ thuộc khi danh sách các gói R được yêu cầu sử dụng tại công ty của tôi.
Tôi đã viết một tập lệnh bash lặp qua danh sách các gói R trong một tệp và sẽ dò tìm phụ thuộc đệ quy.
Tập lệnh sử dụng tệp có tên rinput_orig.txt làm đầu vào (ví dụ bên dưới). Tập lệnh sẽ tạo một tệp có tên là rinput.txt vì nó hoạt động.
Các kịch bản sẽ tạo ra các tập tin sau đây:
- rdepsfound.txt - Danh sách phụ thuộc tìm thấy bao gồm các gói R đó là phụ thuộc vào nó (ví dụ dưới đây).
- routput.txt - Liệt kê tất cả các gói R (từ danh sách gốc và danh sách phụ thuộc) cùng với giấy phép và URL CRAN (ví dụ bên dưới).
- r404.txt - Danh sách các gói R nơi nhận được 404 khi cố gắng cuộn tròn. Điều này rất tiện lợi nếu danh sách ban đầu của bạn có bất kỳ lỗi chính tả nào.
Bash kịch bản:
#!/bin/bash
# CLEANUP
rm routput.txt
rm rdepsfound.txt
rm r404.txt
# COPY ORIGINAL INPUT TO WORKING INPUT
cp rinput_orig.txt rinput.txt
IFS=","
while read PACKAGE; do
echo Processing $PACKAGE...
PACKAGEURL="http://cran.r-project.org/web/packages/${PACKAGE}/index.html"
if [ `curl -o /dev/null --silent --head --write-out '%{http_code}\n' ${PACKAGEURL}` != 404 ]; then
# GET LICENSE INFO OF PACKAGE
LICENSEINFO=$(curl ${PACKAGEURL} 2>/dev/null | grep -A1 "License:" | grep -v "License:" | gawk 'match($0, /<a href=".*">(.*)<\/a>/, a) {print a[0]}' | sed "s/|/,/g" | sed "s/+/,/g")
for x in ${LICENSEINFO[*]}
do
# SAVE LICENSE
LICENSE=$(echo ${x} | gawk 'match($0, /<a href=".*">(.*)<\/a>/, a) {print a[1]}')
break
done
# WRITE PACKAGE AND LICENSE TO OUTPUT FILE
echo $PACKAGE $LICENSE $PACKAGEURL >> routput.txt
# GET DEPENDENCIES OF PACKAGE
DEPS=$(curl ${PACKAGEURL} 2>/dev/null | grep -A1 "Depends:" | grep -v "Depends:" | gawk 'match($0, /<a href=".*">(.*)<\/a>/, a) {print a[0]}')
for x in ${DEPS[*]}
do
FOUNDDEP=$(echo "${x}" | gawk 'match($0, /<a href=".*">(.*)<\/a>/, a) {print a[1]}' | sed "s/<\/span>//g")
if [ "$FOUNDDEP" != "" ]; then
echo Found dependency $FOUNDDEP for $PACKAGE...
grep $FOUNDDEP rinput.txt > /dev/null
if [ "$?" = "0" ]; then
echo $FOUNDDEP already exists in package list...
else
echo Adding $FOUNDDEP to package list...
# SAVE FOUND DEPENDENCY BACK TO INPUT LIST
echo $FOUNDDEP >> rinput.txt
# SAVE FOUND DEPENDENCY TO DEPENDENCY LIST FOR EASY VIEWING OF ALL FOUND DEPENDENCIES
echo $FOUNDDEP is a dependency of $PACKAGE >> rdepsfound.txt
fi
fi
done
else
echo Skipping $PACKAGE because 404 was received...
echo $PACKAGE $PACKAGEURL >> r404.txt
fi
done < rinput.txt
echo -e "\nRESULT:"
sort -u routput.txt
Ví dụ rinput_orig.txt:
shiny
rmarkdown
xtable
RODBC
RJDBC
XLConnect
openxlsx
xlsx
Rcpp
Ví dụ giao diện điều khiển đầu ra khi chạy kịch bản:
Processing shiny...
Processing rmarkdown...
Processing xtable...
Processing RODBC...
Processing RJDBC...
Found dependency DBI for RJDBC...
Adding DBI to package list...
Found dependency rJava for RJDBC...
Adding rJava to package list...
Processing XLConnect...
Found dependency XLConnectJars for XLConnect...
Adding XLConnectJars to package list...
Processing openxlsx...
Processing xlsx...
Found dependency rJava for xlsx...
rJava already exists in package list...
Found dependency xlsxjars for xlsx...
Adding xlsxjars to package list...
Processing Rcpp...
Processing DBI...
Processing rJava...
Processing XLConnectJars...
Processing xlsxjars...
Found dependency rJava for xlsxjars...
rJava already exists in package list...
Ví dụ rdepsfound.txt:
DBI is a dependency of RJDBC
rJava is a dependency of RJDBC
XLConnectJars is a dependency of XLConnect
xlsxjars is a dependency of xlsx
Ví dụ routput.txt:
shiny GPL-3 http://cran.r-project.org/web/packages/shiny/index.html
rmarkdown GPL-3 http://cran.r-project.org/web/packages/rmarkdown/index.html
xtable GPL-2 http://cran.r-project.org/web/packages/xtable/index.html
RODBC GPL-2 http://cran.r-project.org/web/packages/RODBC/index.html
RJDBC GPL-2 http://cran.r-project.org/web/packages/RJDBC/index.html
XLConnect GPL-3 http://cran.r-project.org/web/packages/XLConnect/index.html
openxlsx GPL-3 http://cran.r-project.org/web/packages/openxlsx/index.html
xlsx GPL-3 http://cran.r-project.org/web/packages/xlsx/index.html
Rcpp GPL-2 http://cran.r-project.org/web/packages/Rcpp/index.html
DBI LGPL-2 http://cran.r-project.org/web/packages/DBI/index.html
rJava GPL-2 http://cran.r-project.org/web/packages/rJava/index.html
XLConnectJars GPL-3 http://cran.r-project.org/web/packages/XLConnectJars/index.html
xlsxjars GPL-3 http://cran.r-project.org/web/packages/xlsxjars/index.html
Tôi hy vọng điều này sẽ giúp người!
Một giải pháp gọn gàng và đơn giản khác là chức năng nội bộ recursivePackageDependencies
từ thư viện packrat
. Tuy nhiên, gói phải được cài đặt trong một số thư viện trên máy của bạn. Ưu điểm là nó cũng làm việc với các gói non-CRAN tự tạo. Ví dụ:
packrat:::recursivePackageDependencies("ggplot2",lib.loc = .libPaths()[1])
hiến:
[1] "R6" "RColorBrewer" "Rcpp" "colorspace" "dichromat" "digest" "gtable"
[8] "labeling" "lazyeval" "magrittr" "munsell" "plyr" "reshape2" "rlang"
[15] "scales" "stringi" "stringr" "tibble" "viridisLite"
- 1. liệt kê các gói phụ thuộc python mà không cần tải chúng?
- 2. Cài đặt Gói R mà không cần Internet
- 3. Liệt kê các đối tượng đã xuất từ gói R mà không cần đính kèm nó
- 4. Liệt kê các gói site python đã cài đặt?
- 5. Liệt kê các gói đã cài đặt trong kênh
- 6. Meteor: Cách liệt kê các gói đã cài đặt
- 7. Cây phụ thuộc gói Python
- 8. Việc gỡ cài đặt gói có "pip" cũng có xóa các gói phụ thuộc không?
- 9. Cài đặt gói rCharts trên R 2.15.2
- 10. Cài đặt các gói lên R
- 11. Liệt kê tất cả các gói con của gói
- 12. Cài đặt gói kernlab trong R
- 13. Gói cài đặt R toàn cầu
- 14. Không thể cài đặt gói R-rèn sử dụng install.packages
- 15. Tải xuống các phụ thuộc MacPorts mà không cần cài đặt
- 16. Không thể cài đặt gói R trong Ubuntu 11.04
- 17. Liệt kê tất cả các tệp trong gói homebrew
- 18. Gói phụ thuộc
- 19. Họa tiết gói phụ thuộc vào tikz/pgf
- 20. "ERR! Không phải là một gói" khi cài đặt phụ thuộc node.js cho yepnope.js
- 21. js grunt cài đặt gói
- 22. Cài đặt gói Python trong Windows
- 23. Sự cố khi cài đặt các gói R
- 24. Số lượng thống kê cài đặt cho các gói PyPI?
- 25. Làm thế nào để cài đặt các phụ thuộc khi sử dụng "R CMD INSTALL" để cài đặt các gói R?
- 26. cách cài đặt gói R "RNetCDF" và "ncdf" trên Ubuntu?
- 27. Không thể cài đặt plugin trong nhật thực do phụ thuộc vào gói org.eclipse.core.runtime 3.8.0
- 28. Xem trước trang hướng dẫn mà không cần cài đặt gói
- 29. Nhận thời gian tính bằng mili giây mà không cần cài đặt thêm gói?
- 30. Cách cài đặt gói mới cho lisp chung mà không cần asdf-install
'công cụ :: dependsOnPkgs' – hadley
Cảm ơn, rằng sẽ về đã cứu tôi một thời gian :), Vì nó không phải là rõ ràng trong tài liệu, một ví dụ cho Giả sử ggplot sẽ là dependsOnPkgs ("ggplot2", được cài đặt = available.packages()) –
Nếu có bất kỳ hàm trợ giúp nào đó ở đâu đó ('utils',' tools'?) để trích xuất tất cả các lệnh không đệ quy từ địa chỉ 'DESCRIPTION' tập tin sau đó nó sẽ được tốt đẹp để có nó được đăng như là câu trả lời quá. Nếu không, một trình bao bọc trên 'read.dcf' sẽ giải nén các kiểu dep khác nhau + các khoảng trắng tước, có thể đạt được điều đó. – jangorecki