我有以下功能供个人使用。它需要一个作者的名字,看看我的机器上是否有他们的软件包。为什么rownames(installed.packages())具有names属性?
authoredPackages <- function (author)
{
s <- sapply(rownames(installed.packages()),
packageDescription, fields = "Author")
names(grep(author, s, value = TRUE))
}
这是问题所在。当打开一个新的R会话和分配功能,第一次调用该函数总是返回空字符串的字符向量它应该返回向量的正确长度。为了表明这一点,请打开一个新的R会话,分配函数,并使用您最喜欢的包作者的姓氏来运行它。它应该首先返回一个空的字符向量...
authoredPackages("Temple Lang")
# [1] "" "" "" ""
...然后再做一次,它返回正确的结果......
authoredPackages("Temple Lang")
# [1] "jsonlite" "RCurl" "RJSONIO" "XML"
它总是只发生在第一次调用在新的R会议上。为什么会发生这种情况,我该如何解决这个问题,以便该功能始终可以在第一次尝试时使用?
我R --vanilla
会议信息:
R version 3.1.1 (2014-07-10)
Platform: x86_64-pc-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
更新:一旦打开R,则似乎rownames(installed.packages())
有因为lme4
包的names
属性。不知道为什么,这是唯一的名字。在第二次通话中它消失也很奇怪。
rownames(installed.packages())[228]
# ret0
# "lme4"
有R --vanilla开始? 'sessionInfo()'?我'authoredPackages()'按预期工作的修补[R版本3.1.2(2014年10月31日r66919)/平台:x86_64的未知-Linux的GNU(64位)和R在发展(不稳定)(2014- 11-23 r67046)/平台:x86_64的未知-Linux的GNU(64位) – 2014-11-25 00:27:58
好像'ret0'在'installed.packages'源,当提到NOCACHE = FALSE朝向函数的末尾;也许增加'noCache = TRUE'作为参数是一个解决方法? – 2014-11-25 01:45:20
@MartinMorgan:不错的猜测,但添加'noCache = TRUE'仍然会给我带来同样奇怪的结果。 – 2014-11-25 13:37:39