【问题标题】:functions in .Rprofile are not found with are in .env.Rprofile 中的函数在 .env 中找不到
【发布时间】:2016-09-09 10:42:15
【问题描述】:

我有一个从https://www.r-bloggers.com/fun-with-rprofile-and-customizing-r-startup/ 复制的 .Rprofile 但是,当我加载我的 R 会话时,env$ 中的函数不起作用,env 中没有的函数可以完美运行,这里是示例:

sshhh <- function(a.package){
   suppressWarnings(suppressPackageStartupMessages(
   library(a.package, character.only=TRUE)))
}

 auto.loads <-c("dplyr", "ggplot2")

if(interactive()){
  invisible(sapply(auto.loads, sshhh))
 }

.env <- new.env()
attach(.env)

.env$unrowname <- function(x) {
 rownames(x) <- NULL
x 
}

.env$unfactor <- function(df){
 id <- sapply(df, is.factor)
 df[id] <- lapply(df[id], as.character)
 df
 }

message("n*** Successfully loaded .Rprofile ***n")

加载 R 后,我可以输入 sshhh 并显示功能,但如果我输入 unfactor 则显示 object not found

有什么帮助吗?我应该把所有功能都放在我的工作区吗???

【问题讨论】:

  • 也许你应该 attach(.env) 在你的所有函数都没有中途定义之后
  • 我会attach(.env) 看看它是否有效,虽然我已经添加了它
  • 在将函数添加到 .env 后需要附加。
  • ps 鉴于现在创建包几乎毫不费力,因此可能值得创建一个并向其中添加您的函数,以节省附加环境的麻烦。

标签: r rprofile


【解决方案1】:

它们在单独的环境中创建的功能被有意隐藏。这是为了保护他们免受对rm(list=ls())的调用。

来自原文:

[第 58-59 行]:这将创建一个新的隐藏命名空间,我们可以存储它 一些功能。我们需要这样做才能使这些功能 在对“rm(list=ls())”的调用中幸存下来,这将删除 当前命名空间。这篇博文 [1] 对此进行了精彩的描述。

要使用 unfactor 函数,您可以调用 .env$unfactor()

如果您想让这些函数在全局命名空间中可用而不必引用.env,您可以简单地省略整个.env 部分,只需按照与sshhh 相同的方式添加函数功能。

[1]http://gettinggeneticsdone.blogspot.com.es/2013/07/customize-rprofile.html

【讨论】:

  • 感谢@KeithHughitt,但是当我启动 R 会话时,如何使这些功能可用?我应该加载环境吗?
  • 只需在定义函数时删除.env$ 部分,并按照与sshhh() 函数相同的方式分配它们。
  • @KeithHughittl;如果在定义.env$unfactor函数后将attach(.env)添加到.Rprofile脚本中,则可以通过unfactor访问该函数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-28
  • 1970-01-01
  • 1970-01-01
  • 2013-04-04
  • 2022-12-11
  • 1970-01-01
相关资源
最近更新 更多