【问题标题】:mysterious .N object in global environment after installing R package安装 R 包后全局环境中的神秘 .N 对象
【发布时间】:2016-05-28 09:43:19
【问题描述】:

我创建了一个供个人使用的包,它有一些依赖项:

Depends: R (>= 3.2.3), data.table (>= 1.9.6), bit64 (>= 0.9.5), 
         ggplot2 (>= 2.0.0), yaml (>= 2.1.13)

当我通过devtools::install() 安装这个包时,它完成并且没有错误。

当我通过library(somePackage) 在新会话中加载包时 我收到了神秘的信息:

附加包:‘data.table’

以下对象被 '.GlobalEnv' 屏蔽:

.N

全局环境中没有对象——我尝试ls(),它返回一个空字符串、清除工作区[broom icon]等。然而:

> .N
[1] 100419

这对我没有任何意义——我知道 .N 在 data.table 中是什么,但不知道 100419 来自哪里。我怎样才能知道这真的要去搜索路径中的哪个环境?

> search()
 [1] ".GlobalEnv"           "package:somePackage"  "package:devtools"     "package:yaml"        
 [5] "package:ggplot2"      "package:bit64"        "package:bit"          "package:data.table"  
 [9] "tools:rstudio"        "package:stats"        "package:graphics"     "package:grDevices"   
[13] "package:utils"        "package:datasets"     "package:methods"      "Autoloads"           
[17] "package:base"  

我相信依赖是部分原因,因为当我从DESCRIPTION文件中删除这一行时,我没有这个问题。

在 Windows 的 R 3.2.3 上运行 devtools 1.10.0

更新:感谢@MrFlick 的提示:

> ls(all.names=TRUE)
[1] ".N"           ".Random.seed"

所以它在全球环境中,但它是如何到达那里的,为什么它优先?

【问题讨论】:

  • ls() 隐藏以句点开头的名称。试试ls(all.names=TRUE)。这是在重新启动 R 之后吗?您是否正在加载现有工作区? getAnywhere(".N") 还应该显示变量的来源。
  • @MrFlick 感谢您的建议!请参阅更新——加上是新的 R 重新启动,没有现有的工作区啊——如果我用“删除隐藏的对象”切换它清除环境,它就会消失并且不会屏蔽 data.table。
  • 您是否在 RStudio 中运行所有内容?
  • @Pascal 是的,v0.99.879
  • 相同版本的 RStudio,但 ls(all.names=TRUE) 只提供 ".Random.seed"。您是否从某个地方定义了.N?知道.N是包data.table中定义的变量。

标签: r devtools


【解决方案1】:

我在加载 data.table 时收到了同样的消息。不知道我什么时候加载了.N,所以我选择了以下内容:

  1. 检查所有变量,看看我有什么:

    ls(all.names=TRUE)

  2. 删除所有变量:

    rm(list = ls(all.names=TRUE))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-16
    • 2012-06-04
    • 2018-10-27
    • 2017-12-30
    • 2020-01-09
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多