专业R用户,您的.Rprofile中有什么?[关闭]


271

我一直发现其他人的启动配置文件对这种语言既有用又有启发性。此外,尽管我对BashVim进行了一些自定义,但我对R没有任何帮助。

例如,我一直想要的一件事是在窗口终端中输入和输出文本的颜色不同,甚至语法高亮。


29
不幸的是,这个问题是封闭的,但我强烈认为正确的答案是“什么都没有”。建议不要使用.Rprofile,而建议将初始化脚本保留在每个项目的顶层,而该初始化脚本会在项目中每个脚本的开始处调用它。这样可以通过源代码控制在其他用户之间复制您的工作。但是,这里有一些绝妙的答案!我将其中一些想法放入自己的初始化脚本中。
十一月

18
@geneorama-好的评论,但我会对您的回答有所保留:.Rprofile不应包含任何会改变结果的代码。您可以包括的东西会改变R的外观(例如options("width"=160))或默认的CRAN镜像(例如options(repos = c(CRAN = "http://cran.rstudio.com")))。但是,请勿加载程序包,更改常用功能的默认选项,定义功能等。您的代码应该是自包含的,并且在没有特定.Rprofile文件的情况下重现结果。
user2503795 2014年

@geneorama,那么我应该在哪里放置自定义函数?也许在单独的包/命名空间中?在里面容易/可能.Rprofile吗?
亚伦·麦克戴德

2
@ aaron-mcdaid首先@ user2503795是绝对正确的,.Rprofile是进行应用程序更改的适当位置。其次,您的问题应该是一个单独的SO问题。我尝试使用类似于我们在食品检验项目中所做的工作的模式(请参见每个脚本顶部的代码布局和初始化步骤)。
2015年

Answers:


96

这是我的。它不会帮助您进行着色,但是我从ESS和Emacs那里得到了...

options("width"=160)                # wide display with multiple monitors
options("digits.secs"=3)            # show sub-second time stamps

r <- getOption("repos")             # hard code the US repo for CRAN
r["CRAN"] <- "http://cran.us.r-project.org"
options(repos = r)
rm(r)

## put something this is your .Rprofile to customize the defaults
setHook(packageEvent("grDevices", "onLoad"),
        function(...) grDevices::X11.options(width=8, height=8, 
                                             xpos=0, pointsize=10, 
                                             #type="nbcairo"))  # Cairo device
                                             #type="cairo"))    # other Cairo dev
                                             type="xlib"))      # old default

## from the AER book by Zeileis and Kleiber
options(prompt="R> ", digits=4, show.signif.stars=FALSE)


options("pdfviewer"="okular")         # on Linux, use okular as the pdf viewer

我不确定,但是我认为现在X11.options已被windows.options取代。真的吗?
曼努埃尔·拉蒙

您可以将其放在一个块中,而不是先创建r然后再rm对其进行操作local({ })。很好的答案,我喜欢X11的配置!
亚伦·麦克戴德

是的,local({ ... })如图所示,这help(Startup)是我最近几天通常在执行的操作Rprofile.site。一段时间不需要X11了:)
Dirk Eddelbuettel

59
options(stringsAsFactors=FALSE)

尽管我实际上没有在.Rprofile中包含该代码,但是由于它可能会破坏我的共同作者的代码,所以我希望它是默认设置。为什么?

1)字符向量使用更少的内存(但几乎没有);

2)更重要的是,我们将避免出现以下问题:

> x <- factor(c("a","b","c"))
> x
[1] a b c
Levels: a b c
> x <- c(x, "d")
> x
[1] "1" "2" "3" "d"

> x <- factor(c("a","b","c"))
> x[1:2] <- c("c", "d")
Warning message:
In `[<-.factor`(`*tmp*`, 1:2, value = c("c", "d")) :
  invalid factor level, NAs generated

当您需要时,这些因素非常重要(例如,在图形中实现排序),但是大多数时候都是很麻烦的。


Eduardo-有趣的是,不使用因素有什么优势?
medriscoll

28
+1我希望这是R中的默认设置
。– Iterator

5
请注意,在32位系统上,字符向量似乎只使用较少的内存(大约200个字节)。在64位系统上,因素的使用要少得多。 stat.ethz.ch/pipermail/r-help/2012-August/321919.html
Ari B. Friedman

+1感谢您指出一些主要因素。imo SAS的格式系统具有许多优势。从文本读取时,stringsAsFactors始终设置为false。但是,对于数据传输,我尽量避免从电子表格中读取。
AdamO

58

我讨厌每次都输入完整的单词“ head”,“ summary”,“ names”,所以我使用别名。

您可以将别名放入.Rprofile文件中,但必须使用该函数的完整路径(例如utils :: head),否则它将无法正常工作。

# aliases
s <- base::summary
h <- utils::head
n <- base::names

编辑:要回答您的问题,您可以使用colorout包在终端中使用不同的颜色。凉!:-)


8
我认为n调试时会在后面亲自咬我。
RomanLuštrik'11

2
可以很好地用于交互式R,但是它们不是可移植的-不要将它们放在您的(编写)代码中!
文斯(Vince)2012年

25
如果您曾经删除全局环境中的所有对象,那么上面的别名也将被删除。您可以通过将它们隐藏在环境中来防止这种情况。 .startup <- new.env() assign("h", utils::head, env=.startup) assign("n", base::names, env=.startup) assign("ht", function(d) rbind(head(d,6),tail(d,6)) , env=.startup) assign("s", base::summary, env=.startup) attach(.startup)
凯文·赖特

12
我尝试了这个好主意,但是我已经使用了,所以我做了sum <- base::summary。那不是一个好主意。
2012年

1
re colorout:“”“该软件包已存档:它使用了CRAN策略不允许的非API入口点。”“”
同构

26

这是我的。我总是使用主要的cran存储库,并且拥有一些代码,可以轻松地获取开发中的程序包代码。

.First <- function() {
    library(graphics)
    options("repos" = c(CRAN = "http://cran.r-project.org/"))
    options("device" = "quartz")
}

packages <- list(
  "describedisplay" = "~/ggobi/describedisplay",
  "linval" = "~/ggobi/linval", 

  "ggplot2" =  "~/documents/ggplot/ggplot",
  "qtpaint" =  "~/documents/cranvas/qtpaint", 
  "tourr" =    "~/documents/tour/tourr", 
  "tourrgui" = "~/documents/tour/tourr-gui", 
  "prodplot" = "~/documents/categorical-grammar"
)

l <- function(pkg) {
  pkg <- tolower(deparse(substitute(pkg)))
  if (is.null(packages[[pkg]])) {
    path <- file.path("~/documents", pkg, pkg)
  } else {
    path <- packages[pkg]
  }

  source(file.path(path, "load.r"))  
}

test <- function(path) {
  path <- deparse(substitute(path))
  source(file.path("~/documents", path, path, "test.r"))  
}

26

我喜欢保存我的R命令历史记录,并在每次运行R时都可用:

在shell或.bashrc中:

export R_HISTFILE=~/.Rhistory

在.Rprofile中:

.Last <- function() {
        if (!any(commandArgs()=='--no-readline') && interactive()){
                require(utils)
                try(savehistory(Sys.getenv("R_HISTFILE")))
        }
}

23

这是我发现在使用Windows时很方便的两个功能。

第一个将\s 转换为/

.repath <- function() {
   cat('Paste windows file path and hit RETURN twice')
   x <- scan(what = "")
   xa <- gsub('\\\\', '/', x)
   writeClipboard(paste(xa, collapse=" "))
   cat('Here\'s your de-windowsified path. (It\'s also on the clipboard.)\n', xa, '\n')
 }

第二个在新的资源管理器窗口中打开工作目录。

getw <- function() {
    suppressWarnings(shell(paste("explorer",  gsub('/', '\\\\', getwd()))))
}

2
.repath这样进入我的.Rprofile。
Waldir Leoncio 2014年

1
我写了一个包含此功能的RStudio插件。您只需复制路径,单击RStudio中的菜单,转换后的路径将插入到您的光标位置。这样可以节省一些击键。
dracodoc

1
我非常讨厌Windows路径问题。我想我可能有更好的解决方案。我添加了一个片段。所以我所要做的就是输入wpp然后按tab,我的复制路径就会显示出来。这是代码。 snippet wpp `r paste("\"", gsub("\\\\", "/", readClipboard()), "\"", sep = "")`
jamesguy0121

18

我已经有了这个更动态的技巧来使用完整的终端宽度,该技巧试图从COLUMNS环境变量中读取(在Linux上):

tryCatch(
  {options(
      width = as.integer(Sys.getenv("COLUMNS")))},
  error = function(err) {
    write("Can't get your terminal width. Put ``export COLUMNS'' in your \
           .bashrc. Or something. Setting width to 120 chars",
           stderr());
    options(width=120)}
)

这样,即使您调整终端窗口的大小,R也会使用整个宽度。


1
如果COLUMNS未设置,则可以尝试width = as.integer(system('tput cols',intern=TRUE)作为支持。
shabbychef 2012年

17

我的大多数个人功能和已加载的库都在Rfunctions.r脚本中

source("c:\\data\\rprojects\\functions\\Rfunctions.r")


.First <- function(){
   cat("\n Rrrr! The statistics program for Pirates !\n\n")

  }

  .Last <- function(){
   cat("\n Rrrr! Avast Ye, YO HO!\n\n")

  }


#===============================================================
# Tinn-R: necessary packages
#===============================================================
library(utils)
necessary = c('svIDE', 'svIO', 'svSocket', 'R2HTML')
if(!all(necessary %in% installed.packages()[, 'Package']))
  install.packages(c('SciViews', 'R2HTML'), dep = T)

options(IDE = 'C:/Tinn-R/bin/Tinn-R.exe')
options(use.DDE = T)

library(svIDE)
library(svIO)
library(svSocket)
library(R2HTML)
guiDDEInstall()
shell(paste("mkdir C:\\data\\rplots\\plottemp", gsub('-','',Sys.Date()), sep=""))
pldir <- paste("C:\\data\\rplots\\plottemp", gsub('-','',Sys.Date()), sep="")

plot.str <-c('savePlot(paste(pldir,script,"\\BeachSurveyFreq.pdf",sep=""),type="pdf")')

1
嘿,我想过要给R GUI命名为“ Arrr”,这是增加一些海盗善良的简便方法。
沙皮犬

2
嗯谢谢 很高兴知道我并不是唯一一个在发射R时认为海盗的人。:-)我发誓我会在这几天中克服它。
ARS

1
这解释了为什么@Dirk在脚本中设置了钩子……
詹姆斯

1
“ Avast Ye”是非标准海盗。我更喜欢我的海盗遵守标准。另外,它的意思是“紧紧抓住”,所以从一开始就更有意义吗?:P
naught101

2
实际上,最后它是完全合理的。因为退出r域后,我们将返回到其周围的较小环境,并且必须再次处理电子表格和临时文本文件。
kpierce8 2013年

17

来自我的〜/ .Rprofile,它是为Mac和Linux设计的。

这些使错误更容易发现。

options(showWarnCalls=T, showErrorCalls=T)

我讨厌CRAN菜单选择,因此设置为一个不错的选择。

options(repos=c("http://cran.cnr.Berkeley.edu","http://cran.stat.ucla.edu"))

更多历史!

Sys.setenv(R_HISTSIZE='100000')

以下是用于从终端在Mac OSX上运行的程序(我更喜欢R.app,因为它更稳定,并且您可以按目录组织您的工作;还请确保获得一个〜/ .inputrc)。默认情况下,您会看到一个X11显示屏,看起来并不那么好;相反,它提供了与GUI相同的石英显示器。if当您在Mac上的终端上运行R时,该语句应该可以解决这种情况。

f = pipe("uname")
if (.Platform$GUI == "X11" && readLines(f)=="Darwin") {
  # http://www.rforge.net/CarbonEL/
  library("grDevices")
  library("CarbonEL")
  options(device='quartz')
  Sys.unsetenv("DISPLAY")
}
close(f); rm(f)

并预加载一些库,

library(plyr)
library(stringr)
library(RColorBrewer)
if (file.exists("~/util.r")) {
  source("~/util.r")
}

其中util.r是在流量下随机使用的东西。

另外,由于其他人提到控制台宽度,所以这是我的方法。

if ( (numcol <-Sys.getenv("COLUMNS")) != "") {
  numcol = as.integer(numcol)
  options(width= numcol - 1)
} else if (system("stty -a &>/dev/null") == 0) {
  # mac specific?  probably bad in the R GUI too.
  numcol = as.integer(sub(".* ([0-9]+) column.*", "\\1", system("stty -a", intern=T)[1]))
  if (numcol > 0)
    options(width=  numcol - 1 )
}
rm(numcol)

实际上,这并不存在,.Rprofile因为每次您调整终端窗口的大小时都必须重新运行它。我有它,util.r然后我根据需要提供它。


如果我在xterm窗口中打开R(通过键入“ R”),是否应该打开类似R gui的窗口?通过将此.Rprofile添加到主目录中,我看不出任何区别。
理查德·赫伦 Richard Herron)2010年

否。它的作用是将所有内容保留在控制台中。但是,在绘制事物时,它使用比默认X11显示设备更智能的显示设备。
布伦丹·奥康纳 Brendan OConnor)2010年

我觉得这些调整窗口大小的脚本可以有用地打包。你同意吗?
同构

16

这是我的:

.First <- function () {
  options(device="quartz")
}

.Last <- function () {
  if (!any(commandArgs() == '--no-readline') && interactive()) {
    require(utils)
    try(savehistory(Sys.getenv("R_HISTFILE")))
  }
}

# Slightly more flexible than as.Date
# my.as.Date("2009-01-01") == my.as.Date(2009, 1, 1) == as.Date("2009-01-01")
my.as.Date <- function (a, b=NULL, c=NULL, ...) {
  if (class(a) != "character")
    return (as.Date(sprintf("%d-%02d-%02d", a, b, c)))
  else
    return (as.Date(a))
}

# Some useful aliases
cd <- setwd
pwd <- getwd
lss <- dir
asd <- my.as.Date # examples: asd("2009-01-01") == asd(2009, 1, 1) == as.Date("2009-01-01")
last <- function (x, n=1, ...) tail(x, n=n, ...)

# Set proxy for all web requests
Sys.setenv(http_proxy="http://192.168.0.200:80/")

# Search RPATH for file <fn>.  If found, return full path to it
search.path <- function(fn,
     paths = strsplit(chartr("\\", "/", Sys.getenv("RPATH")), split =
                switch(.Platform$OS.type, windows = ";", ":"))[[1]]) {
  for(d in paths)
     if (file.exists(f <- file.path(d, fn)))
        return(f)
  return(NULL)
}

# If loading in an environment that doesn't respect my RPATH environment
# variable, set it here
if (Sys.getenv("RPATH") == "") {
  Sys.setenv(RPATH=file.path(path.expand("~"), "Library", "R", "source"))
}

# Load commonly used functions
if (interactive())
  source(search.path("afazio.r"))

# If no R_HISTFILE environment variable, set default
if (Sys.getenv("R_HISTFILE") == "") {
  Sys.setenv(R_HISTFILE=file.path("~", ".Rhistory"))
}

# Override q() to not save by default.
# Same as saying q("no")
q <- function (save="no", ...) {
  quit(save=save, ...)
}

# ---------- My Environments ----------
#
# Rather than starting R from within different directories, I prefer to
# switch my "environment" easily with these functions.  An "environment" is
# simply a directory that contains analysis of a particular topic.
# Example usage:
# > load.env("markets")  # Load US equity markets analysis environment
# > # ... edit some .r files in my environment
# > reload()             # Re-source .r/.R files in my environment
#
# On next startup of R, I will automatically be placed into the last
# environment I entered

# My current environment
.curr.env = NULL

# File contains name of the last environment I entered
.last.env.file = file.path(path.expand("~"), ".Rlastenv")

# Parent directory where all of my "environment"s are contained
.parent.env.dir = file.path(path.expand("~"), "Analysis")

# Create parent directory if it doesn't already exist
if (!file.exists(.parent.env.dir))
  dir.create(.parent.env.dir)

load.env <- function (string, save=TRUE) {
  # Load all .r/.R files in <.parent.env.dir>/<string>/
  cd(file.path(.parent.env.dir, string))
  for (file in lss()) {
    if (substr(file, nchar(file)-1, nchar(file)+1) %in% c(".r", ".R"))
      source(file)
  }
  .curr.env <<- string
  # Save current environment name to file
  if (save == TRUE) writeLines(.curr.env, .last.env.file)
  # Let user know environment switch was successful
  print (paste(" -- in ", string, " environment -- "))
}

# "reload" current environment.
reload <- resource <- function () {
  if (!is.null(.curr.env))
    load.env(.curr.env, save=FALSE)
  else
    print (" -- not in environment -- ")
}

# On startup, go straight to the environment I was last working in
if (interactive() && file.exists(.last.env.file)) {
  load.env(readLines(.last.env.file))
}

1
您不应在公共网站上发布机构代理的地址。
dalloliogm 2010年

13
dalloliogm,这是一个私有(非公共)IP地址。全世界有成千上万个具有相同IP地址的计算机。试图找出哪一个是我的好运!
Alfred J Fazio

2
阿尔弗雷德(Alfred),您是否找到了一种在.Rprofile中定义函数的方法(如此处所示),除了使用初始的'。'命名之外,还没有在执行ls()时显示它们?我在ls()时定义的函数过于混乱。谢谢
Keith 2010年

4
@Keith将它们分配给环境并将该环境附加到搜索路径,然后进行清理。如果功能在单独的文件中,则可以直接从环境获取源代码。见?new.env?assign?sys.source。如果您无法使用它,请在SO上发布新的Q,我相信您会获得答案。
加文·辛普森

my.as.DateLubridate包裹可能会取代您的包裹。我对吗?
同构

11
sink(file = 'R.log', split=T)

options(scipen=5)

.ls.objects <- function (pos = 1, pattern, order.by = "Size", decreasing=TRUE, head =     TRUE, n = 10) {
  # based on postings by Petr Pikal and David Hinds to the r-help list in 2004
  # modified by: Dirk Eddelbuettel (http://stackoverflow.com/questions/1358003/tricks-to-    manage-the-available-memory-in-an-r-session) 
  # I then gave it a few tweaks (show size as megabytes and use defaults that I like)
  # a data frame of the objects and their associated storage needs.
  napply <- function(names, fn) sapply(names, function(x)
          fn(get(x, pos = pos)))
  names <- ls(pos = pos, pattern = pattern)
  obj.class <- napply(names, function(x) as.character(class(x))[1])
  obj.mode <- napply(names, mode)
  obj.type <- ifelse(is.na(obj.class), obj.mode, obj.class)
  obj.size <- napply(names, object.size) / 10^6 # megabytes
  obj.dim <- t(napply(names, function(x)
            as.numeric(dim(x))[1:2]))
  vec <- is.na(obj.dim)[, 1] & (obj.type != "function")
  obj.dim[vec, 1] <- napply(names, length)[vec]
  out <- data.frame(obj.type, obj.size, obj.dim)
  names(out) <- c("Type", "Size", "Rows", "Columns")
  out <- out[order(out[[order.by]], decreasing=decreasing), ]
  if (head)
    out <- head(out, n)
  out
}

11

使data.frames显示类似于“ head”,而无需键入“ head”

print.data.frame <- function(df) {
   if (nrow(df) > 10) {
      base::print.data.frame(head(df, 5))
      cat("----\n")
      base::print.data.frame(tail(df, 5))
   } else {
      base::print.data.frame(df)
   }
}

(从如何使“头部”自动应用于输出?


10

我经常需要调用一连串的调试调用,并且对它们进行注释会非常乏味。在SO社区的帮助下,我寻求了以下解决方案,并将其插入了我的.Rprofile.site# BROWSER我的Eclipse任务在那里,因此我可以在“任务视图”窗口中浏览器调用的概述。

# turn debugging on or off
# place "browser(expr = isTRUE(getOption("debug"))) # BROWSER" in your function
# and turn debugging on or off by bugon() or bugoff()
bugon <- function() options("debug" = TRUE)
bugoff <- function() options("debug" = FALSE) #pun intended

9

我的不是太花哨:

# So the mac gui can find latex
Sys.setenv("PATH" = paste(Sys.getenv("PATH"),"/usr/texbin",sep=":"))

#Use last(x) instead of x[length(x)], works on matrices too
last <- function(x) { tail(x, n = 1) }

#For tikzDevice caching 
options( tikzMetricsDictionary='/Users/cameron/.tikzMetricsDictionary' )

8
setwd("C://path//to//my//prefered//working//directory")
library("ggplot2")
library("RMySQL")
library("foreign")
answer <- readline("What database would you like to connect to? ")
con <- dbConnect(MySQL(),user="root",password="mypass", dbname=answer)

我从mysql数据库中进行了大量工作,因此立即连接是天赐之物。我只希望有一种列出可用数据库的方法,这样我就不必记住所有不同的名称。


4
傻了我dbGetQuery(con,“显示数据库;”)
布兰登·

8

Stephen Turner在.Rprofiles上的帖子具有几个有用的别名和启动函数。

我发现自己经常使用ht和hh。

#ht==headtail, i.e., show the first and last 10 items of an object
ht <- function(d) rbind(head(d,10),tail(d,10))

# Show the first 5 rows and first 5 columns of a data frame or matrix
hh <- function(d) d[1:5,1:5]

有一个名为BurStMisc的程序包,其中包含一个称为cornerhh函数,该函数与您的函数相同,并且功能更多。;)
Waldir Leoncio 2014年

7

这是我的,包括一些提到的想法。

您可能要看两件事:

  • .set.width()/ w()将打印宽度更新为终端之一。不幸的是,我找不到在终端大小调整时自动执行此操作的方法-R文档提到此操作是由某些R解释器完成的。
  • 每次都会保存历史记录以及时间戳和工作目录

.set.width <- function() {
  cols <- as.integer(Sys.getenv("COLUMNS"))
  if (is.na(cols) || cols > 10000 || cols < 10)
    options(width=100)
  options(width=cols)
}

.First <- function() {
  options(digits.secs=3)              # show sub-second time stamps
  options(max.print=1000)             # do not print more than 1000 lines
  options("report" = c(CRAN="http://cran.at.r-project.org"))
  options(prompt="R> ", digits=4, show.signif.stars=FALSE)
}

# aliases
w <- .set.width

.Last <- function() {
  if (!any(commandArgs()=='--no-readline') && interactive()){
    timestamp(,prefix=paste("##------ [",getwd(),"] ",sep=""))
    try(savehistory("~/.Rhistory"))
   }
}

7

我使用以下命令使cacheSweave(或pgfSweave)与RStudio中的“编译PDF”按钮一起使用:

library(cacheSweave)
assignInNamespace("RweaveLatex", cacheSweave::cacheSweaveDriver, "utils")


7

这是我的。没什么太创新了。关于为什么要选择的想法:

  • stringsAsFactors之所以设置默认值,是因为我发现每次读入CSV都将其作为参数传递时非常耗费精力。也就是说,在使用计算机上的普通计算机上编写的代码时,这已经使我有些烦恼了没有我的.Rprofile。不过,我保留了它,因为与没有将其每天设置成引起的麻烦相比,它引起的麻烦显得苍白。
  • 如果您utils之前没有加载过该软件包options(error=recover),则将其放置在interactive()块中后将无法恢复。
  • 我使用.db我的保管箱设置,而不是options(dropbox=...)因为我一直在内部使用它file.path,并且节省了很多打字时间。领先.保持它从出现ls()

无需再费周折:

if(interactive()) {
    options(stringsAsFactors=FALSE)
    options(max.print=50)
    options(repos="http://cran.mirrors.hoobly.com")
}

.db <- "~/Dropbox"
# `=` <- function(...) stop("Assignment by = disabled, use <- instead")
options(BingMapsKey="blahblahblah") # Used by taRifx.geo::geocode()

.First <- function() {
    if(interactive()) {
        require(functional)
        require(taRifx)
        require(taRifx.geo)
        require(ggplot2)
        require(foreign)
        require(R.utils)
        require(stringr)
        require(reshape2)
        require(devtools)
        require(codetools)
        require(testthat)
        require(utils)
        options(error=recover)
    }
}

7

这是将表导出到LaTeX的小片段。对于我编写的许多报告,它将所有列名称更改为数学模式。我的.Rprofile的其余部分非常标准,并且大部分内容已在上面介绍。

# Puts $dollar signs in front and behind all column names col_{sub} -> $col_{sub}$

amscols<-function(x){
    colnames(x) <- paste("$", colnames(x), "$", sep = "")
    x
}

5

我在个人资料中设置了格子颜色主题。这是我使用的其他两项调整:

# Display working directory in the titlebar
# Note: This causes demo(graphics) to fail
utils::setWindowTitle(base::getwd())
utils::assignInNamespace("setwd",function(dir)   {.Internal(setwd(dir));setWindowTitle(base::getwd())},"base")

# Don't print more than 1000 lines
options(max.print=2000)

1
setwd替换版本将在以下版本中更好地发挥作用:utils::assignInNamespace("setwd",function(dir) {on.exit(setWindowTitle(base::getwd())); .Internal(setwd(dir))}, "base")
Marek

5

我有一个环境变量R_USER_WORKSPACE,它指向软件包的顶层目录。在.Rprofile中,我定义了一个devlib函数,该函数设置工作目录(以便data()起作用)并在R子目录中获取所有.R文件。它与上面的Hadley的l()函数非常相似。

devlib <- function(pkg) {
  setwd(file.path(Sys.getenv("R_USER_WORKSPACE", "."), deparse(substitute(pkg)), "dev"))
  sapply(list.files("R", pattern=".r$", ignore.case=TRUE, full.names=TRUE), source)
  invisible(NULL)
}

.First <- function() {
  setwd(Sys.getenv("R_USER_WORKSPACE", "."))
  options("repos" = c(CRAN = "http://mirrors.softliste.de/cran/", CRANextra="http://www.stats.ox.ac.uk/pub/RWin"))
}

.Last <- function() update.packages(ask="graphics")

5

我发现确实有两个功能是必要的:首先,当我设置debug()了几个功能并且已经解决了该错误时,所以我想要undebug()所有功能-而不是一个一个地使用。此处undebug_all()添加为可接受答案的功能是最好的。

其次,当我定义了许多函数并且要查找特定的变量名时,很难在的所有结果中找到它ls(),包括函数名。该lsnofun()功能在这里发布真的很好。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.