gpt4 book ai didi

r - 如何在我的R库中找到从GitHub安装的软件包?

转载 作者:行者123 更新时间:2023-12-04 06:14:50 24 4
gpt4 key购买 nike

我想知道我当前库中有多少个软件包是从GitHub安装的,但是找不到解决方法

# The number of installed packages in my library
length(.packages(all.available=TRUE))
[1] 145

这个R-bloggers帖子显示了软件包的版本,但没有显示它们的安装位置。
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的输出,然后编写一个函数来确定description是否将其标记为github包。尽管还没有进行广泛的测试,但我还是第一次通过了它。
isGithub <- function(pkg){!is.null(packageDescription(pkg)$GithubRepo)}

然后要在我们所有的软件包上运行它,我们可以像这样列出.libPaths中的文件夹
sapply(dir(.libPaths()), isGithub)

关于r - 如何在我的R库中找到从GitHub安装的软件包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49698348/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com