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

时间:2016-09-09 10:42:16

标签: r rprofile

我有一个。{Rprofile我已经从https://www.r-bloggers.com/fun-with-rprofile-and-customizing-r-startup/复制了但是,当我加载我的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

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

1 个答案:

答案 0 :(得分: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