Usuários especialistas em R, o que há no seu perfil .R? [fechadas]


272

Sempre achei os arquivos de perfil de inicialização de outras pessoas úteis e instrutivos sobre o idioma. Além disso, embora eu tenha algumas personalizações para Bash e Vim , não tenho nada para R.

Por exemplo, uma coisa que sempre desejei são cores diferentes para entrada e saída de texto em um terminal de janela e talvez até destaque de sintaxe.


29
Infelizmente, a pergunta está encerrada, mas acho fortemente que a resposta certa é "nada". Em vez de usar .Rprofile, sugiro manter um script de inicialização no nível superior de cada projeto que o invoque no início de cada script no seu projeto. Isso mantém seu trabalho reproduzível entre outros usuários via controle de origem. Mas, existem algumas respostas brilhantes aqui! Vou colocar algumas dessas idéias em meus próprios scripts de inicialização.
geneorama

18
@geneorama - Bom comentário, mas gostaria de qualificar sua resposta um pouco: o .Rprofilenão deve incluir nenhum código que altere os resultados. O que você pode incluir são itens que alteram a aparência de R (por exemplo options("width"=160)) ou o espelho CRAN padrão (por exemplo options(repos = c(CRAN = "http://cran.rstudio.com"))). No entanto, não carregue pacotes, altere as opções padrão das funções usadas regularmente, defina a função etc. Seu código deve ser independente e reproduzir os resultados sem o seu .Rprofilearquivo específico .
User2503795

@geneorama, onde devo colocar funções personalizadas? Talvez em um pacote / espaço para nome separado? Isso é fácil / possível por dentro .Rprofile?
Aaron McDaid

2
@ aaron-mcdaid Primeiro @ user2503795 está absolutamente certo, .Rprofileé um local apropriado para fazer alterações no aplicativo. Segundo, sua pergunta deve ser uma questão SO separada. Eu tento usar um padrão semelhante ao que fizemos em nosso projeto de inspeção de alimentos (consulte o layout do código e as etapas de inicialização na parte superior de cada script).
geneorama

Respostas:


96

Aqui é minha. Não vai ajudá-lo com a coloração, mas eu entendo isso da ESS e 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

Não tenho certeza, mas acho que agora o X11.options foi substituído pelo windows.options. Isso é verdade?
Manuel Ramón

Em vez de criar re, em seguida rm, colocá-lo em um local({ })bloco. Boa resposta, porém, eu amo a configuração do X11!
Aaron McDaid

Sim, local({ ... })como mostrado em help(Startup)é o que eu costumo fazer atualmente Rprofile.site. Já não é necessário o corte X11 em quando :)
Dirk Eddelbuettel

59
options(stringsAsFactors=FALSE)

Embora eu realmente não tenha isso no meu perfil .r, porque pode quebrar o código dos meus co-autores, eu gostaria que fosse o padrão. Por quê?

1) Os vetores de caracteres usam menos memória (mas apenas por pouco);

2) Mais importante, evitaríamos problemas como:

> 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"

e

> 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

Os fatores são ótimos quando você precisa deles (por exemplo, implementar a ordenação em gráficos), mas são um incômodo na maioria das vezes.


Eduardo - Interessante, quais são as vantagens de não usar fatores?
medriscoll 8/09/09

28
+1 Gostaria que este fosse o padrão em R.
Iterator

5
Observe que os vetores de caracteres parecem usar apenas menos memória (duzentos bytes) nos sistemas de 32 bits. Nos sistemas de 64 bits, os fatores usam consideravelmente menos. stat.ethz.ch/pipermail/r-help/2012-August/321919.html
Ari B. Friedman

+1 Obrigado por apontar alguns dos principais problemas com fatores. O sistema de formato do SAS tem muitas vantagens sobre isso, imo. Ao ler um texto, stringsAsFactors é sempre definido como false. No entanto, para transferência de dados, evito ler da planilha sempre que possível.
22420 AdamOf

58

Eu odeio digitar as palavras completas 'cabeça', 'resumo', 'nomes' toda vez, então uso aliases.

Você pode colocar aliases no seu arquivo .Rprofile, mas precisa usar o caminho completo para a função (por exemplo, utils :: head), caso contrário não funcionará.

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

EDIT: para responder sua pergunta, você pode usar o pacote colorout para ter cores diferentes no terminal. Legal! :-)


8
Eu acho que niria me morder, pessoalmente, na parte posterior durante a depuração.
Roman Luštrik

2
Ótimo para uso R interativo, mas estes não são portáteis - não os coloque no seu código (escrito)!
Vince

25
Se você excluir todos os objetos em seu ambiente global, os aliases acima também serão excluídos. Você pode impedir isso ocultando-os em um ambiente. .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)
Kevin Wright

12
Tentei essa ótima idéia, mas já usei s, então tentei sum <- base::summary. Essa não foi uma ótima idéia.
Tom

1
re colorout: "" "Este pacote foi arquivado:. É usado pontos de entrada não-API não é permitido pelas políticas CRAN" ""
isomorphismes

26

Aqui está o meu. Eu sempre uso o repositório principal do cran e tenho código para facilitar a fonte do código do pacote em desenvolvimento.

.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

Eu gosto de salvar meu histórico de comandos R e disponibilizá-lo sempre que executo o R:

No shell ou .bashrc:

export R_HISTFILE=~/.Rhistory

em .Rprofile:

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

23

Aqui estão duas funções que considero úteis para trabalhar com o Windows.

O primeiro converte \s em /.

.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')
 }

O segundo abre o diretório de trabalho em uma nova janela do explorer.

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

2
Isto .repathé assim como chegar no meu .Rprofile.
Waldir Leoncio 20/02

1
Eu escrevi um complemento do RStudio que incluía esse recurso. Você acabou de copiar o caminho, clicar em um menu do RStudio e o caminho convertido será inserido na localização do cursor. Isso deve salvar algumas teclas.
Dracodoc

1
Eu odeio muito o problema do caminho do Windows. Eu acho que posso ter uma solução ainda melhor. Eu adicionei um trecho. então tudo o que preciso fazer é digitar wpp, pressionar tab e meu caminho copiado aparece. Aqui está o código. snippet wpp `r paste("\"", gsub("\\\\", "/", readClipboard()), "\"", sep = "")`
Jamesguy0121

18

Eu tenho esse truque mais dinâmico para usar a largura total do terminal, que tenta ler a variável de ambiente COLUMNS (no 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)}
)

Dessa forma, o R usará toda a largura, mesmo quando você redimensionar sua janela do terminal.


1
Quando COLUMNSnão está definido, você pode tentar width = as.integer(system('tput cols',intern=TRUE)como recuo.
shabbychef

17

A maioria das minhas funções pessoais e bibliotecas carregadas estão no script 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
Hei, pensei em nomear uma GUI R "Arrr" - esta é uma maneira muito mais fácil de adicionar um pouco de pirataria.
28289 Sharpie

2
Ah obrigado. É bom saber que eu não sou o único que pensa pirata ao disparar R. :-) Eu juro que vou superar isso um dia desses.
ars

1
Isso explica porque @Dirk estava se pondo o seu gancho em seu script ...
James

1
"Avast Ye" é um pirata não padrão . Prefiro que meu pirata esteja em conformidade com os padrões. Além disso, significa ~ "segure firme", então não faria mais sentido no começo? : P
naught101

2
Na verdade, faz todo o sentido no final. Pois, ao sair do domínio r, retornamos ao ambiente menor em torno dele e devemos novamente lidar com planilhas e arquivos de texto ad-hoc.
precisa saber é o seguinte

17

Aqui está no meu ~ / .Rprofile , projetado para Mac e Linux.

Isso facilita a visualização dos erros.

options(showWarnCalls=T, showErrorCalls=T)

Eu odeio a escolha do menu CRAN, então defina uma boa.

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

Mais história!

Sys.setenv(R_HISTSIZE='100000')

O seguinte é para rodar no Mac OSX a partir do terminal (que eu prefiro muito ao R.app porque é mais estável e você pode organizar seu trabalho por diretório; também certifique-se de obter um bom ~ / .inputrc ). Por padrão, você obtém uma tela X11, que não parece tão boa; isso fornece uma exibição de quartzo igual à GUI. A ifdeclaração deve entender o caso quando você estiver executando o R no terminal no Mac.

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)

E pré-carregue algumas bibliotecas,

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

onde util.r é um pacote aleatório de coisas que eu uso, sob fluxo.

Além disso, como outras pessoas mencionaram a largura do console, veja como eu faço isso.

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)

Na verdade, isso não ocorre .Rprofileporque você precisa executá-lo novamente sempre que redimensionar a janela do terminal. Eu o tenho, util.rentão apenas o forneço conforme necessário.


Se eu abrir o R ​​em uma janela do xterm (digitando "R"), ele deve abrir uma janela do tipo gui R? Não posso dizer nenhuma diferença adicionando esse .Rprofile ao meu diretório pessoal.
Richard Herron

Não. O que isso faz é que mantém tudo no console. No entanto, quando você plota as coisas, ele usa um dispositivo de exibição mais inteligente que o dispositivo de exibição X11 padrão.
Brendan OConnor

Eu sinto que esses scripts de redimensionamento de janelas podem ser úteis em um pacote. Você concorda?
Isomorphismes

16

Aqui estão os meus:

.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
você não deve postar o endereço do proxy da sua instituição em um site público.
precisa saber é o seguinte

13
dalloliogm, este é um endereço IP privado (não público). Existem centenas de milhares de computadores em todo o mundo com exatamente esse mesmo endereço IP. Boa sorte tentando descobrir qual é o meu!
Alfred J Fazio

2
alfred, você encontrou uma maneira de definir funções em .Rprofile (como você tem aqui) sem que elas apareçam quando você faz um ls (), além de nomear com um inicial '.'? Eu tenho muita confusão com as funções que defini quando ls (). Obrigado
Keith

4
@Keith atribui-os a um ambiente, anexa-o ao caminho de pesquisa e depois limpa. Se as funções estiverem em um arquivo separado, você poderá originar diretamente no ambiente. Ver ?new.env, ?assigne ?sys.source. Se você não conseguir fazê-lo funcionar, publique um novo Q no SO e tenho certeza de que obterá respostas.
Gavin Simpson

Você my.as.Datepode ser substituído pelo Lubridatepacote. Estou certo?
Isomorphismes

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
}


10

Muitas vezes, tenho uma cadeia de chamadas de depuração que preciso chamar e descomentá-las pode ser muito entediante. Com a ajuda da comunidade SO , procurei a seguinte solução e a inseri na minha .Rprofile.site. # BROWSERestá lá para minhas tarefas do Eclipse, para que eu tenha uma visão geral das chamadas do navegador na janela Modo de exibição de tarefas.

# 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

O meu não é muito chique:

# 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)

Eu faço muito trabalho com bancos de dados mysql, portanto, conectar imediatamente é uma dádiva de Deus. Eu só queria que houvesse uma maneira de listar os bancos de dados disponíveis, para que eu não precisasse lembrar de todos os nomes diferentes.


4
boba me dbGetQuery (con "bancos de dados mostra;")
Brandon Bertelsen

8

A publicação de Stephen Turner no .Rprofiles possui vários aliases úteis e funções de inicialização.

Encontro-me usando seu ht e hh frequentemente.

#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]

Há um pacote chamado BurStMisc que contém uma função chamada cornerque faz o mesmo que a sua hhfunção e um pouco mais. ;)
Waldir Leoncio 20/02

7

Aqui está o meu, incluindo algumas das idéias mencionadas.

Duas coisas que você pode querer considerar:

  • .set.width () / w () atualiza sua largura de impressão para a do terminal. Infelizmente, não encontrei uma maneira de fazer isso automaticamente no redimensionamento do terminal - a documentação do R menciona que isso é feito por alguns intérpretes do R.
  • o histórico é salvo sempre, junto com um carimbo de data e hora e o diretório de trabalho

.

.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

Eu uso o seguinte para obter cacheSweave (ou pgfSweave) para trabalhar com o botão "Compilar PDF" no RStudio:

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


7

Aqui está o meu. Nada muito inovador. Pensamentos sobre por que escolhas específicas:

  • Fui definir um padrão, stringsAsFactorsporque acho extremamente cansativo passá-lo como argumento toda vez que leio um arquivo CSV. Dito isso, ele já me causou um pouco de irritação ao usar o código escrito no meu computador habitual em um computador que não tinha meu perfil. Eu estou mantendo isso, no entanto, como os problemas que causou pálidos em comparação com os problemas que não costumam causar todos os dias.
  • Se você não carregar o utilspacote antes options(error=recover), ele não poderá se recuperar quando colocado dentro de um interactive()bloco.
  • Eu usei .dba minha configuração da caixa de depósito em vez de options(dropbox=...)usá-la o tempo todo por dentro file.pathe economiza muita digitação. O líder .impede que ele apareça ls().

Sem mais delongas:

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

Aqui está um pequeno trecho para exportar tabelas para o LaTeX . Ele muda todos os nomes de colunas para o modo matemático para os muitos relatórios que escrevo. O resto do meu .Rprofile é bastante padrão e, em grande parte, coberto acima.

# 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

Defino meu tema de cores da estrutura no meu perfil. Aqui estão dois outros ajustes que eu uso:

# 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
Esta setwdsubstituição funcionará melhor na versão:utils::assignInNamespace("setwd",function(dir) {on.exit(setWindowTitle(base::getwd())); .Internal(setwd(dir))}, "base")
Marek

5

Eu tenho uma variável de ambiente R_USER_WORKSPACE que aponta para o diretório superior dos meus pacotes. No .Rprofile, defino uma função devlib que define o diretório de trabalho (para que data () funcione) e origine todos os arquivos .R no subdiretório R. É bastante semelhante à função l () de Hadley acima.

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

Eu achei duas funções realmente necessárias: primeiro, quando defini debug()várias funções e resolvi o bug, então quero undebug()todas as funções - não uma por uma. A undebug_all()função adicionada como resposta aceita aqui é a melhor.

Segundo, quando defini muitas funções e procuro um nome de variável específico, é difícil encontrá-lo em todos os resultados do ls(), incluindo os nomes das funções. A lsnofun()função postada aqui é realmente boa.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.