我还通过考虑rJAva 包中的其他类型的依赖关系扩展了@GSW 答案的解决方案:
libs = installed.packages()
imports = grep("Java", libs[,"Imports"], ignore.case=TRUE)
depends = grep("Java", libs[,"Depends"], ignore.case=TRUE)
linking.to = grep("Java", libs[,"LinkingTo"], ignore.case=TRUE)
enhances = grep("Java", libs[,"Enhances"], ignore.case=TRUE)
# SystemRequirements may also contain Java dependencies but is not available in the matrix
libs[c(imports, depends, linking.to, enhances),
c("Package", "Imports", "Depends", "LinkingTo", "Enhances")]
现在也可以找到例如。 xlsx:
Package Imports Depends LinkingTo Enhances
xlsx "xlsx" NA "rJava, xlsxjars" NA NA
xlsxjars "xlsxjars" NA "rJava" NA NA
2021 年 12 月 21 日编辑:如果您想查找所有直接依赖于 JAVA(例如,由于log4j 漏洞)的 CRAN 包(不仅是已安装的包),您可以使用:
# Dependencies external to the R system should be listed in the `SystemRequirements` field of the package's DESCRIPTION file.
# This also holds true until the package uses Java via the rJava package where the `Imports` or `Depends` declaration suffices:
# https://cran.r-project.org/doc/manuals/R-exts.html#Non_002dR-scripts-in-packages
CRAN.pkgs <- tools::CRAN_package_db() # gets a list of all R packages at CRAN
imports = grepl("Java", CRAN.pkgs$Imports, ignore.case = TRUE)
depends = grepl("Java", CRAN.pkgs$Depends, ignore.case = TRUE)
linking.to = grepl("Java", CRAN.pkgs$LinkingTo, ignore.case = TRUE)
enhances = grepl("Java", CRAN.pkgs$Enhances, ignore.case = TRUE)
sysreq = grepl("Java", CRAN.pkgs$SystemRequirements, ignore.case = TRUE)
CRAN.java.pkgs <- CRAN.pkgs[imports | depends | linking.to | enhances | sysreq,
c("Package", "Imports", "Depends", "LinkingTo", "Enhances", "SystemRequirements")]
NROW(CRAN.pkgs) # more than 18.000 in 12/2021
NROW(CRAN.java.pkgs) # 137 in 12/2021
CRAN.java.pkgs$Package # show all packages found