如何找出从我的 R 库中的 GitHub 安装了哪个包?
How to find out which package was installed from GitHub in my R library?
我想知道我当前库中有多少包是从 GitHub 安装的,但找不到解决方法
# The number of installed packages in my library
length(.packages(all.available=TRUE))
[1] 145
这个 R-bloggers post 显示了软件包的版本,但没有显示它们的安装位置
https://www.r-bloggers.com/list-of-user-installed-r-packages-and-their-versions/
ip <- as.data.frame(installed.packages()[, c(1, 3:4)])
rownames(ip) <- NULL
ip <- ip[is.na(ip$Priority), 1:2, drop=FALSE]
print(ip, row.names=FALSE)
Package Version
abind 1.4-5
acepack 1.4.1
ade4 1.7-10
albersusa 0.3.0
AnnotationDbi 1.40.0
ansistrings 1.0.0
ape 5.0
aqp 1.15
ash 1.0-15
assertthat 0.2.0
astsa 1.8
ATmet 1.2
automap 1.0-14
backports 1.1.2
base64 2.0
base64enc 0.1-3
bazar 1.0.6
BBmisc 1.11
beeswarm 0.2.3
BH 1.66.0-1
我想我可以加载所有包然后 运行 devtools::session_info()
找到我想要的
https://www.r-bloggers.com/loading-all-installed-r-packages/
lapply(.packages(all.available=TRUE),
function(x) library(x, character.only=TRUE))
但后来我 运行 遇到了另一个问题:同时加载太多包 maximal number of DLLs reached...
。包 changepoint
只是 100 多个包中的第 53 个包
Error: package or namespace load failed for ‘changepoint’ in inDL(x, as.logical(local), as.logical(now), ...):
unable to load shared object 'C:/RCat/library/changepoint/libs/x64/changepoint.dll':
`maximal number of DLLs reached...
编辑 1:我使用了@Dason 建议的代码,但出现了这些错误
# empty folder
> sapply(dir(.libPaths()), isGithub)
Error: $ operator is invalid for atomic vectors
In addition: Warning message:
In packageDescription(pkg) :
DESCRIPTION file of package 'file31043e741b3f' is missing or broken
# only lattice.dll left in lattice/lib/x64
> sapply(dir(.libPaths()), isGithub)
Error: $ operator is invalid for atomic vectors
In addition: Warning message:
In packageDescription(pkg) :
DESCRIPTION file of package 'lattice' is missing or broken
非常感谢您的帮助!!!
使用来源。如果您检查 devtools::session_info()
的代码,相关信息似乎在 devtools::package_info()
中。 package_info 的代码是:
> getAnywhere("package_info")
A single object matching ‘package_info’ was found
It was found in the following places
namespace:devtools
with value
function (pkgs = loadedNamespaces(), include_base = FALSE, libpath = NULL)
{
desc <- suppressWarnings(lapply(pkgs, packageDescription,
lib.loc = libpath))
not_installed <- vapply(desc, identical, logical(1), NA)
if (any(not_installed)) {
stop("`pkgs` ", paste0("'", pkgs[not_installed], "'",
collapse = ", "), " are not installed", call. = FALSE)
}
if (!include_base) {
base <- vapply(pkgs, pkg_is_base, logical(1))
pkgs <- pkgs[!base]
}
pkgs <- sort_ci(pkgs)
attached <- pkgs %in% sub("^package:", "", search())
desc <- lapply(pkgs, packageDescription, lib.loc = libpath)
version <- vapply(desc, function(x) x$Version, character(1))
date <- vapply(desc, pkg_date, character(1))
source <- vapply(desc, pkg_source, character(1))
pkgs_df <- data.frame(package = pkgs, `*` = ifelse(attached,
"*", ""), version = version, date = date, source = source,
stringsAsFactors = FALSE, check.names = FALSE)
rownames(pkgs_df) <- NULL
class(pkgs_df) <- c("packages_info", "data.frame")
pkgs_df
}
<bytecode: 0x000000000e211f50>
<environment: namespace:devtools>
基本上 utils::packageDescription() 的输出被传递给 devtools::pkg_source()。因此,如果您愿意,您可以只检查 packageDescription 的输出,然后编写一个函数来确定描述是否将其标记为 github 包。尽管我没有广泛测试,但我还是第一次通过了它。
isGithub <- function(pkg){!is.null(packageDescription(pkg)$GithubRepo)}
然后 运行 它在我们所有的包中,我们可以只列出 .libPaths 中的文件夹
sapply(dir(.libPaths()), isGithub)
感谢@Dason,我终于让它工作了
查找从 GitHub
安装的包的函数
isGithub <- function(pkg){
!is.null(packageDescription(pkg)$GithubRepo)
}
获取本地库中的所有包
my_lib <- as.data.frame(library()$result, stringsAsFactors=FALSE)
检查哪些包来自 GitHub
result <- sapply(my_lib$Package, isGithub)
df <- data.frame(package = names(result), github_or_not = result,
stringsAsFactors = FALSE)
head(df[df$result == TRUE, ])
names.result. result
4 bindr TRUE
5 bindrcpp TRUE
6 blogdown TRUE
9 chroma TRUE
17 dplyr TRUE
21 editR TRUE
稍作修改,允许您浏览库并确定每个库的来源,包括 github 存储库的名称
library(tidyverse)
#> Registered S3 methods overwritten by 'ggplot2':
#> method from
#> [.quosures rlang
#> c.quosures rlang
#> print.quosures rlang
#> Registered S3 method overwritten by 'rvest':
#> method from
#> read_xml.response xml2
allmypackages <- as.data.frame(installed.packages())
allmypackages <- allmypackages %>%
filter(Priority != "base" | is.na(Priority)) %>%
select(-c(Enhances:MD5sum, LinkingTo:Suggests)) %>%
droplevels()
package_source <- function(pkg){
x <- as.character(packageDescription(pkg)$Repository)
if (length(x)==0) {
y <- as.character(packageDescription(pkg)$GithubRepo)
z <- as.character(packageDescription(pkg)$GithubUsername)
if (length(y)==0) {
return("Other")
} else {
return(str_c("GitHub repo = ", z, "/", y))
}
} else {
return(x)
}
}
head(sapply(allmypackages$Package, package_source),60)
#> [1] "CRAN" "CRAN"
#> [3] "CRAN" "CRAN"
#> [5] "CRAN" "CRAN"
#> [7] "CRAN" "CRAN"
#> [9] "CRAN" "CRAN"
#> [11] "CRAN" "CRAN"
#> [13] "CRAN" "CRAN"
#> [15] "CRAN" "CRAN"
#> [17] "CRAN" "CRAN"
#> [19] "CRAN" "CRAN"
#> [21] "CRAN" "CRAN"
#> [23] "CRAN" "CRAN"
#> [25] "CRAN" "CRAN"
#> [27] "CRAN" "CRAN"
#> [29] "CRAN" "CRAN"
#> [31] "CRAN" "CRAN"
#> [33] "CRAN" "CRAN"
#> [35] "CRAN" "CRAN"
#> [37] "CRAN" "CRAN"
#> [39] "CRAN" "CRAN"
#> [41] "CRAN" "CRAN"
#> [43] "CRAN" "CRAN"
#> [45] "Other" "R-Forge"
#> [47] "CRAN" "CRAN"
#> [49] "CRAN" "CRAN"
#> [51] "CRAN" "CRAN"
#> [53] "CRAN" "CRAN"
#> [55] "CRAN" "CRAN"
#> [57] "CRAN" "CRAN"
#> [59] "GitHub repo = cjtexas/colourgen" "CRAN"
allmypackages$whereat <- sapply(allmypackages$Package, package_source)
由 reprex package (v0.2.1)
于 2019-05-14 创建
我想知道我当前库中有多少包是从 GitHub 安装的,但找不到解决方法
# The number of installed packages in my library
length(.packages(all.available=TRUE))
[1] 145
这个 R-bloggers post 显示了软件包的版本,但没有显示它们的安装位置 https://www.r-bloggers.com/list-of-user-installed-r-packages-and-their-versions/
ip <- as.data.frame(installed.packages()[, c(1, 3:4)])
rownames(ip) <- NULL
ip <- ip[is.na(ip$Priority), 1:2, drop=FALSE]
print(ip, row.names=FALSE)
Package Version
abind 1.4-5
acepack 1.4.1
ade4 1.7-10
albersusa 0.3.0
AnnotationDbi 1.40.0
ansistrings 1.0.0
ape 5.0
aqp 1.15
ash 1.0-15
assertthat 0.2.0
astsa 1.8
ATmet 1.2
automap 1.0-14
backports 1.1.2
base64 2.0
base64enc 0.1-3
bazar 1.0.6
BBmisc 1.11
beeswarm 0.2.3
BH 1.66.0-1
我想我可以加载所有包然后 运行 devtools::session_info()
找到我想要的
https://www.r-bloggers.com/loading-all-installed-r-packages/
lapply(.packages(all.available=TRUE),
function(x) library(x, character.only=TRUE))
但后来我 运行 遇到了另一个问题:同时加载太多包 maximal number of DLLs reached...
。包 changepoint
只是 100 多个包中的第 53 个包
Error: package or namespace load failed for ‘changepoint’ in inDL(x, as.logical(local), as.logical(now), ...):
unable to load shared object 'C:/RCat/library/changepoint/libs/x64/changepoint.dll':
`maximal number of DLLs reached...
编辑 1:我使用了@Dason 建议的代码,但出现了这些错误
# empty folder
> sapply(dir(.libPaths()), isGithub)
Error: $ operator is invalid for atomic vectors
In addition: Warning message:
In packageDescription(pkg) :
DESCRIPTION file of package 'file31043e741b3f' is missing or broken
# only lattice.dll left in lattice/lib/x64
> sapply(dir(.libPaths()), isGithub)
Error: $ operator is invalid for atomic vectors
In addition: Warning message:
In packageDescription(pkg) :
DESCRIPTION file of package 'lattice' is missing or broken
非常感谢您的帮助!!!
使用来源。如果您检查 devtools::session_info()
的代码,相关信息似乎在 devtools::package_info()
中。 package_info 的代码是:
> getAnywhere("package_info")
A single object matching ‘package_info’ was found
It was found in the following places
namespace:devtools
with value
function (pkgs = loadedNamespaces(), include_base = FALSE, libpath = NULL)
{
desc <- suppressWarnings(lapply(pkgs, packageDescription,
lib.loc = libpath))
not_installed <- vapply(desc, identical, logical(1), NA)
if (any(not_installed)) {
stop("`pkgs` ", paste0("'", pkgs[not_installed], "'",
collapse = ", "), " are not installed", call. = FALSE)
}
if (!include_base) {
base <- vapply(pkgs, pkg_is_base, logical(1))
pkgs <- pkgs[!base]
}
pkgs <- sort_ci(pkgs)
attached <- pkgs %in% sub("^package:", "", search())
desc <- lapply(pkgs, packageDescription, lib.loc = libpath)
version <- vapply(desc, function(x) x$Version, character(1))
date <- vapply(desc, pkg_date, character(1))
source <- vapply(desc, pkg_source, character(1))
pkgs_df <- data.frame(package = pkgs, `*` = ifelse(attached,
"*", ""), version = version, date = date, source = source,
stringsAsFactors = FALSE, check.names = FALSE)
rownames(pkgs_df) <- NULL
class(pkgs_df) <- c("packages_info", "data.frame")
pkgs_df
}
<bytecode: 0x000000000e211f50>
<environment: namespace:devtools>
基本上 utils::packageDescription() 的输出被传递给 devtools::pkg_source()。因此,如果您愿意,您可以只检查 packageDescription 的输出,然后编写一个函数来确定描述是否将其标记为 github 包。尽管我没有广泛测试,但我还是第一次通过了它。
isGithub <- function(pkg){!is.null(packageDescription(pkg)$GithubRepo)}
然后 运行 它在我们所有的包中,我们可以只列出 .libPaths 中的文件夹
sapply(dir(.libPaths()), isGithub)
感谢@Dason,我终于让它工作了
查找从 GitHub
安装的包的函数isGithub <- function(pkg){
!is.null(packageDescription(pkg)$GithubRepo)
}
获取本地库中的所有包
my_lib <- as.data.frame(library()$result, stringsAsFactors=FALSE)
检查哪些包来自 GitHub
result <- sapply(my_lib$Package, isGithub)
df <- data.frame(package = names(result), github_or_not = result,
stringsAsFactors = FALSE)
head(df[df$result == TRUE, ])
names.result. result
4 bindr TRUE
5 bindrcpp TRUE
6 blogdown TRUE
9 chroma TRUE
17 dplyr TRUE
21 editR TRUE
稍作修改,允许您浏览库并确定每个库的来源,包括 github 存储库的名称
library(tidyverse)
#> Registered S3 methods overwritten by 'ggplot2':
#> method from
#> [.quosures rlang
#> c.quosures rlang
#> print.quosures rlang
#> Registered S3 method overwritten by 'rvest':
#> method from
#> read_xml.response xml2
allmypackages <- as.data.frame(installed.packages())
allmypackages <- allmypackages %>%
filter(Priority != "base" | is.na(Priority)) %>%
select(-c(Enhances:MD5sum, LinkingTo:Suggests)) %>%
droplevels()
package_source <- function(pkg){
x <- as.character(packageDescription(pkg)$Repository)
if (length(x)==0) {
y <- as.character(packageDescription(pkg)$GithubRepo)
z <- as.character(packageDescription(pkg)$GithubUsername)
if (length(y)==0) {
return("Other")
} else {
return(str_c("GitHub repo = ", z, "/", y))
}
} else {
return(x)
}
}
head(sapply(allmypackages$Package, package_source),60)
#> [1] "CRAN" "CRAN"
#> [3] "CRAN" "CRAN"
#> [5] "CRAN" "CRAN"
#> [7] "CRAN" "CRAN"
#> [9] "CRAN" "CRAN"
#> [11] "CRAN" "CRAN"
#> [13] "CRAN" "CRAN"
#> [15] "CRAN" "CRAN"
#> [17] "CRAN" "CRAN"
#> [19] "CRAN" "CRAN"
#> [21] "CRAN" "CRAN"
#> [23] "CRAN" "CRAN"
#> [25] "CRAN" "CRAN"
#> [27] "CRAN" "CRAN"
#> [29] "CRAN" "CRAN"
#> [31] "CRAN" "CRAN"
#> [33] "CRAN" "CRAN"
#> [35] "CRAN" "CRAN"
#> [37] "CRAN" "CRAN"
#> [39] "CRAN" "CRAN"
#> [41] "CRAN" "CRAN"
#> [43] "CRAN" "CRAN"
#> [45] "Other" "R-Forge"
#> [47] "CRAN" "CRAN"
#> [49] "CRAN" "CRAN"
#> [51] "CRAN" "CRAN"
#> [53] "CRAN" "CRAN"
#> [55] "CRAN" "CRAN"
#> [57] "CRAN" "CRAN"
#> [59] "GitHub repo = cjtexas/colourgen" "CRAN"
allmypackages$whereat <- sapply(allmypackages$Package, package_source)
由 reprex package (v0.2.1)
于 2019-05-14 创建