.Rprofile 中的函数在 .env 中找不到

functions in .Rprofile are not found with are in .env

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

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

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

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

的调用

来自原文:

[Lines 58-59]: This creates a new hidden namespace that we can store some functions in. We need to do this in order for these functions to survive a call to “rm(list=ls())” which will remove everything in the current namespace. This is described wonderfully in this blog post [1].

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

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

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