getAnywhere(“timestamp”)从Rstudio中找到两个函数

时间:2014-03-21 18:05:42

标签: r rstudio

我试图在Rstudio中调用timestamp函数,但似乎是调用了我想要的版本以外的版本。 getAnywhere表明有两个定义:

> getAnywhere(timestamp)
2 differing objects matching ‘timestamp’ were found
in the following places
  package:utils
  namespace:utils
Use [] to view one of them

> timestamp
function(...) .rs.callAs(name,
                                                         hook,
                                                         original,
                                                         ...)
<environment: 0x0000000005f42030>

> timestamp()
##------ Thu Mar 06 15:08:51 2014 ------##

> utils::timestamp
function (stamp = date(), prefix = "##------ ", suffix = " ------##",
    quiet = FALSE)
{
    stamp <- paste0(prefix, stamp, suffix)
    .External2(C_addhistory, stamp)
    if (!quiet)
        cat(stamp, sep = "\n")
    invisible(stamp)
}
<bytecode: 0x0000000005f447a8>
<environment: namespace:utils>

调用utils::timestamp()会导致RStudio崩溃。如果我只是打电话给timestamp,它似乎忽略了这些参数。

> timestamp(prefix = "##-ddg-- ", quiet=TRUE)

这不会更改与timestamp关联的前缀,并且会将输出返回到控制台,当quiet为true时,它不应该执行此操作。

这是运行R 3.0.1,RStudio 0.97.551,Windows 7 Enterprise Service Pack 1.

在我的Mac上,getAnywhere的结果略有不同,timestamp功能正常。

> getAnywhere(timestamp)
A single object matching ‘timestamp’ was found
It was found in the following places
  package:utils
  namespace:utils
with value

function (stamp = date(), prefix = "##------ ", suffix = " ------##", 
    quiet = FALSE) 
{
    stamp <- paste0(prefix, stamp, suffix)
    .External2(C_addhistory, stamp)
    if (!quiet) 
        cat(stamp, sep = "\n")
    invisible(stamp)
}
<bytecode: 0x7fd90b10bdb8>
<environment: namespace:utils>

这个第二个定义来自Windows?如何让R拨打正确的版本?

感谢您的帮助。

巴巴拉

2 个答案:

答案 0 :(得分:2)

在评论中Jonathan回答这个第二个定义来自Windows?崩溃部分问题

  

在Windows上,RStudio将timestamp替换为自己的方法,因为默认方法具有在RStudio环境中无法满足的依赖关系(这是导致您在直接调用时看到的崩溃的原因)。它的方法是时间戳的替代,但不是包装器,替换不支持原始的所有参数。我鼓励您在RStudio支持论坛上报告问题。

您已在RStudio Support page上确认。它也在之前的RStudio support thread报告。

不幸的是,RStudio的bug数据库看起来是内部的,因此您需要按照commit historylatest version发行说明进行监控,或者preview release

答案 1 :(得分:0)

您的库中有两个名为timestamp的函数,要选择一个函数,请使用方括号[]按照建议选择所需的包。例如。 getAnywhere(timestamp())[1]getAnywhere(timestamp())[2]