专家 R 用户,您的 .Rprofile 中有啥? [关闭]
Posted
技术标签:
【中文标题】专家 R 用户,您的 .Rprofile 中有啥? [关闭]【英文标题】:Expert R users, what's in your .Rprofile? [closed]专家 R 用户,您的 .Rprofile 中有什么? [关闭] 【发布时间】:2010-11-14 10:56:19 【问题描述】:我一直发现其他人的启动配置文件对这门语言既有用又具有指导意义。此外,虽然我对 Bash 和 Vim 进行了一些自定义,但我对 R 没有任何内容。
例如,我一直想要的一件事是在窗口终端中输入和输出文本的不同颜色,甚至可能是语法高亮。
【问题讨论】:
不幸的是,这个问题已经结束,但我强烈认为正确的答案是“什么都没有”。我建议不要使用 .Rprofile,而是在每个项目的顶层保留一个初始化脚本,该脚本会在项目中每个脚本的开头调用它。这使您的工作可以通过源代码控制在其他用户之间重现。但是,这里有一些精彩的答案!我会将其中一些想法放入我自己的初始化脚本中。 @geneorama - 很好的评论,但我会稍微限定你的答案:.Rprofile
不应包含任何更改结果的代码。您可以包含更改 R 外观的内容(例如 options("width"=160)
)或默认 CRAN 镜像(例如 options(repos = c(CRAN = "http://cran.rstudio.com"))
)。但是,不要加载包、更改常用函数的默认选项、定义函数等。您的代码应该是独立的,并且无需您的特定 .Rprofile
文件即可重现结果。
@geneorama,那我应该把自定义函数放在哪里?也许在一个单独的包/命名空间中?在.Rprofile
中这很容易/可能吗?
@aaron-mcdaid 首先@user2503795 是绝对正确的,.Rprofile
是进行应用程序更改的合适位置。其次,您的问题应该是一个单独的 SO 问题。我尝试使用类似于我们在 food inspection 项目中所做的模式(请参阅每个脚本顶部的代码布局和初始化步骤)。
【参考方案1】:
这是我的。它不会帮助您着色,但我从 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 取代。这是真的吗? 您可以将其放在local( )
块中,而不是创建 r
然后 rm
-ing 它。不过答案很好,我喜欢 X11 配置!
是的,local( ... )
中显示的help(Startup)
是我这些天在Rprofile.site
中经常做的事情。暂时不需要 X11 hack :)【参考方案2】:
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 - 有趣,不使用因子有什么好处? +1 我希望这是 R 中的默认设置。 请注意,字符向量似乎只在 32 位系统上使用较少的内存(两百字节左右)。在 64 位系统上,因子的使用要少得多。 stat.ethz.ch/pipermail/r-help/2012-August/321919.html +1 感谢您指出与因素有关的一些主要问题。与此相比,SAS 的格式系统有很多优势,imo。从文本中读取时,stringsAsFactors 始终设置为 false。但是,对于数据传输,我尽可能避免从电子表格中读取数据。 在 R 版本 >=4.0.0 中,这是新的默认值。万岁!【参考方案3】:我讨厌每次都输入完整的单词“head”、“summary”、“names”,所以我使用别名。
您可以将别名放入您的 .Rprofile 文件中,但您必须使用函数的完整路径(例如 utils::head),否则它将不起作用。
# aliases
s <- base::summary
h <- utils::head
n <- base::names
编辑:要回答您的问题,您可以使用 colorout 包在终端中使用不同的颜色。凉爽的! :-)
【讨论】:
我认为n
会在调试时在后面咬我。
非常适合交互式 R 使用,但这些不可移植 - 不要将它们放入您的(书面)代码中!
如果你删除了全局环境中的所有对象,那么上面的别名也将被删除。您可以通过将它们隐藏在环境中来防止这种情况。 .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)
我尝试了这个好主意,但我已经使用了 s 所以我做了sum <- base::summary
。这不是这样一个好主意。
re colorout
: """这个包已经归档:它使用了 CRAN 政策不允许的非 API 入口点。"""【参考方案4】:
我喜欢保存我的 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")))
【讨论】:
【参考方案5】:这是我的。我总是使用主 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"))
【讨论】:
【参考方案6】:这里有两个我觉得在使用 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()))))
【讨论】:
这个.repath
所以进入我的.Rprofile。
我写了a RStudio addin,其中包含了这个功能。您只需复制路径,单击 RStudio 中的菜单,转换后的路径将插入到您的光标位置。这应该可以节省一些击键。
我非常讨厌 Windows 路径问题。我想我可能有更好的解决方案。我添加了一个sn-p。所以我所要做的就是输入 wpp 然后按 Tab 键,我复制的路径就会显示出来。这是代码。 snippet wpp
`r paste("\"", gsub("\\\\", "/", readClipboard()), "\"", sep = "")`
gist.github.com/MonteShaffer/d90f9c14d428789bb57fcc050d5a1a40【参考方案7】:
我有这个更动态的技巧来使用完整的终端宽度,它试图从 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 也会使用全宽。
【讨论】:
当COLUMNS
没有设置时,可以试试width = as.integer(system('tput cols',intern=TRUE)
作为后盾。【参考方案8】:
我的大部分个人函数和加载的库都在 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")')
【讨论】:
嘿,我想过将 R GUI 命名为“Arrr”——这是一种更容易添加盗版特性的方法。 啊,谢谢。很高兴知道我不是唯一一个在启动 R 时会想到海盗的人。:-) 我发誓我会在这些日子里克服它。 它解释了为什么@Dirk 在他的脚本中设置了钩子...... “Avast Ye”是non-standard Pirate。我更喜欢我的海盗符合标准。还有,它的意思是~“抱紧”,所以一开始不是更有意义吗? :P 实际上它在最后很有意义。因为在退出 r 域后,我们会返回到它周围较小的环境,并且必须再次处理电子表格和临时文本文件。【参考方案9】:来自我的~/.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 添加到我的主目录中,我无法分辨出任何区别。 没有。它的作用是将所有内容保存在控制台中。但是,当您绘制内容时,它使用的显示设备比默认的 X11 显示设备更智能。 我觉得这些窗口大小调整脚本可以作为一个有用的包。你同意吗?【参考方案10】:这是我的:
.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))
【讨论】:
您不应在公共网站上发布您机构的代理地址。 daloliogm,这是一个私有(非公共)IP 地址。全世界有数十万台计算机使用这个完全相同的 IP 地址。祝你好运,试图找出哪一个是我的! alfred,你有没有找到一种方法来定义 .Rprofile 中的函数(就像你在这里一样),而不用在你执行 ls() 时显示它们,除了用首字母'.'命名?我在 ls() 时定义的函数太混乱了。谢谢 @Keith 将它们分配给环境并将环境附加到搜索路径,然后清理。如果函数位于单独的文件中,您可以直接将源代码放入环境中。请参阅?new.env
、?assign
和 ?sys.source
。如果你不能让它工作,在 SO 上发布一个新的 Q,我相信你会得到答案。
您的my.as.Date
可能会被Lubridate
包所取代。我说的对吗?【参考方案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://***.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
【讨论】:
【参考方案12】:使 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)
(来自How to make 'head' be applied automatically to output?)
【讨论】:
【参考方案13】:我经常需要调用一系列调试调用,而取消注释它们可能非常乏味。在SO community 的帮助下,我选择了以下解决方案并将其插入到我的.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
【讨论】:
【参考方案14】:我的不是太花哨:
# 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' )
【讨论】:
【参考方案15】: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 数据库上做了很多工作,所以立即连接是天赐之物。我只希望有一种列出可用数据库的方法,这样我就不必记住所有不同的名称。
【讨论】:
傻我 dbGetQuery(con, "show databases;")【参考方案16】:.Rprofiles 上的Stephen Turner's post 有几个有用的别名和启动函数。
我发现自己经常使用他的 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 的包,其中包含一个名为corner
的函数,它的作用与您的 hh
函数相同,还有更多。 ;)【参考方案17】:
这是我的,包括一些提到的想法。
你可能想看看两件事:
.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"))
【讨论】:
【参考方案18】:我使用以下方法让 cacheSweave(或 pgfSweave)与 RStudio 中的“编译 PDF”按钮一起工作:
library(cacheSweave)
assignInNamespace("RweaveLatex", cacheSweave::cacheSweaveDriver, "utils")
【讨论】:
【参考方案19】:我的包括options(menu.graphics=FALSE)
,因为我喜欢Disable/suppress tcltk popup for CRAN mirror selection in R。
【讨论】:
【参考方案20】:这是我的。没什么太创新的。关于为什么选择特定的想法:
我选择为stringsAsFactors
设置默认值,因为我发现
每次我读入 CSV 时,将它作为参数传递非常费力。也就是说,在没有我的 .Rprofile 的计算机上使用我常用计算机上编写的代码时,它已经引起了我的一些小烦恼。不过,我保留了它,因为它所造成的麻烦与没有每天设置它所造成的麻烦相比显得微不足道。
如果您没有在options(error=recover)
之前加载utils
包,则它在放置在interactive()
块内时无法找到recover。
我将.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)
【讨论】:
【参考方案21】:这里有一个小sn-p,用于将表导出到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
【讨论】:
【参考方案22】:我在个人资料中设置了格子颜色主题。这是我使用的另外两个调整:
# 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)
【讨论】:
此setwd
替换在以下版本中效果更好:utils::assignInNamespace("setwd",function(dir) on.exit(setWindowTitle(base::getwd())); .Internal(setwd(dir)), "base")
【参考方案23】:
我有一个环境变量 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")
【讨论】:
【参考方案24】:我发现两个函数真的很有必要:首先,当我在几个函数上设置了debug()
并且我已经解决了这个错误,所以我想undebug()
所有函数 - 不是一个一个。作为接受答案添加的undebug_all()
函数here 是最好的。
其次,当我定义了许多函数并且我正在寻找一个特定的变量名时,很难在ls()
的所有结果中找到它,包括函数名。发here的lsnofun()
功能真不错。
【讨论】:
以上是关于专家 R 用户,您的 .Rprofile 中有啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
检测 R 中的操作系统(例如,用于自适应 .Rprofile 文件)