Utilisateurs experts R, Ce qu'il y a dans votre.Rprofile? [fermé]

j'ai toujours trouvé des fichiers de profil de démarrage d'autres personnes à la fois utiles et instructifs sur la langue. En outre, bien que j'ai un peu de personnalisation pour Bash et Vim , Je n'ai rien pour R.

par exemple, une chose que j'ai toujours voulu est des couleurs différentes pour le texte d'entrée et de sortie dans un terminal de fenêtre, et peut-être même la mise en évidence de syntaxe.

252
demandé sur Peter Mortensen 2009-07-27 22:17:42

24 réponses

voici le mien. Ça ne vous aidera pas pour la coloration, mais je tiens ça de L'ESS et D'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
90
répondu Dirk Eddelbuettel 2014-07-22 03:12:04

je déteste taper les mots "chef", "sommaire", "noms" à chaque fois, j'ai donc utiliser des alias.

Vous pouvez mettre des alias dans votre .RPROFILE file, mais vous devez utiliser le chemin complet de la fonction (par exemple utils::head) sinon ça ne marchera pas.

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

EDIT: pour répondre à votre question, vous pouvez utiliser le paquet colorout pour avoir des couleurs différentes dans le terminal. Cool! :- )

57
répondu dalloliogm 2012-03-06 11:43:17
options(stringsAsFactors=FALSE)

bien que je ne l'ai pas vraiment dans mon .Rprofile, parce qu'il pourrait briser le code de mes co-auteurs, je souhaite qu'il soit le défaut. Pourquoi?

1) les vecteurs de caractères utilisent moins de mémoire (mais à peine);

2) plus important encore, nous éviterions des problèmes tels que:

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

et

> 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

facteurs sont grands lorsque vous avez besoin d'eux (par exemple la mise en œuvre de l'ordre dans les graphiques), mais un la nuisance la plupart du temps.

55
répondu Eduardo Leoni 2009-09-09 01:26:01

voici le mien. J'utilise toujours le dépôt principal du cran, et j'ai du code pour le rendre facile à trouver.

.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"))  
}
25
répondu hadley 2009-07-28 04:34:51

j'aime sauvegarder l'historique de ma commande R et la rendre disponible chaque fois que J'exécute R:

Dans le shell ou .bashrc:

export R_HISTFILE=~/.Rhistory

in .Rprofile:

.Last <- function() {
        if (!any(commandArgs()=='--no-readline') && interactive()){
                require(utils)
                try(savehistory(Sys.getenv("R_HISTFILE")))
        }
}
25
répondu Jeff 2009-09-02 03:05:25

voici deux fonctions que je trouve pratiques pour travailler avec windows.

le premier convertit le \ s en / .

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

le second ouvre le répertoire de travail dans une nouvelle fenêtre d'Explorateur.

getw <- function() {
    suppressWarnings(shell(paste("explorer",  gsub('/', '\\', getwd()))))
}
22
répondu Tom 2012-10-03 07:38:14

j'ai ce, truc plus dynamique pour utiliser la largeur de terminal complète, qui essaie de lire à partir de la variable D'environnement colonnes (sur 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)}
)

de cette façon R utilisera la pleine largeur même si vous redimensionnez votre fenêtre de terminal.

18
répondu Branimir Dolicki 2015-07-29 10:00:54

la plupart de mes fonctions personnelles et des bibliothèques chargées sont dans les Rfunctions.R script

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")')
17
répondu kpierce8 2009-07-27 21:54:20

c'est à partir de mon ~/.Rprofile , conçu pour Mac et Linux.

ceux-ci rendent les erreurs plus faciles à voir.

options(showWarnCalls=T, showErrorCalls=T)

je déteste le choix de menu de CRAN, donc mis à un bon.

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

plus d'histoire!

Sys.setenv(R_HISTSIZE='100000')

ce qui suit est pour exécuter sur Mac OSX à partir du terminal (que je préfère grandement à r. app parce qu'il est plus stable, et vous pouvez organiser votre travail par répertoire; assurez-vous également d'avoir un bon ~/.inputrc ). Par défaut, vous obtenez un affichage X11, qui n'a pas l'air aussi agréable; cela donne plutôt un affichage à quartz identique à L'interface graphique. La déclaration if est censée saisir l'affaire quand vous exécutez R à partir du terminal sur 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)

et Préchargez quelques bibliothèques,

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

util.r est un sac aléatoire de choses I l'utilisation, en vertu de flux.

aussi, puisque d'autres personnes mentionnaient la largeur de la console, voici comment je fais.

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)

ce n'est en fait pas dans .Rprofile parce que vous devez le relancer chaque fois que vous redimensionnez la fenêtre du terminal. Je l'ai dans util.r alors je l'ai juste source comme nécessaire.

16
répondu Brendan OConnor 2011-08-19 20:43:33

Voici les miennes:

.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))
}
16
répondu Alfred J Fazio 2014-11-16 21:23:06
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
répondu Patrick McCann 2011-02-09 22:11:51

Rendre les données.les cadres affichent un peu comme 'tête', seulement sans avoir à taper 'tête '

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

(De Comment faire de la "tête" de s'appliquer automatiquement à la sortie? )

11
répondu Hugh Perkins 2017-05-23 12:25:37

j'ai souvent une chaîne d'appels de débogage que je dois appeler et les décommenter peut être très fastidieux. Avec l'aide de la so community , je suis allé chercher la solution suivante et l'ai insérée dans mon .Rprofile.site . # BROWSER est là pour mes tâches Eclipse de sorte que j'ai un aperçu des appels de navigateur dans la fenêtre de vue des tâches.

# 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
10
répondu Roman Luštrik 2017-05-23 12:17:29

le Mien n'est pas trop de fantaisie:

# 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' )
9
répondu cameron.bracken 2009-07-30 18:30:58
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)

je fais beaucoup de travail à partir de bases de données mysql, donc se connecter tout de suite est une aubaine. J'aimerais qu'il y ait un moyen de lister les bases de données disponibles pour ne pas avoir à me souvenir de tous les noms différents.

8
répondu Brandon Bertelsen 2010-07-26 06:35:42

Stephen's post on .Rprofiles a plusieurs Alias et fonctions de démarrage utiles.

je me retrouve à utiliser son ht et hh souvent.

#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]
8
répondu Ram Narasimhan 2011-12-30 04:08:54

j'utilise ce qui suit pour faire fonctionner cacheSweave (ou pgfSweave) avec le bouton "compiler PDF" dans RStudio:

library(cacheSweave)
assignInNamespace("RweaveLatex", cacheSweave::cacheSweaveDriver, "utils")
7
répondu ROLO 2011-10-21 13:58:34

Mine comprend options(menu.graphics=FALSE) parce que j'aime Désactiver/supprimer tcltk popup pour CRAN miroir de sélection dans la R .

7
répondu isomorphismes 2017-05-23 12:17:29

voici le mien. Rien de trop innovant. Réflexions sur le pourquoi des choix particuliers:

  • j'ai utilisé le paramètre par défaut pour stringsAsFactors parce que je trouve il est extrêmement épuisant de passer comme un argument chaque fois que je lis un CSV dans. Cela dit, il m'a déjà causé une certaine vexation mineure lors de l'utilisation du code écrit sur mon ordinateur habituel sur un ordinateur qui n'avait pas mon .Rprofile. Je le garde, bien que, comme les troubles qu'il a causé pâle en comparaison de les perturbations ne l'ayant pas fixé tous les jours utilisés pour causer.
  • si vous ne chargez pas le paquet utils avant options(error=recover) , il ne peut pas retrouver recover lorsqu'il est placé dans un bloc interactive() .
  • j'ai utilisé .db pour mon réglage de dropbox plutôt que options(dropbox=...) parce que je l'utilise tout le temps dans file.path et il économise beaucoup de Dactylographie. Le premier . l'empêche d'apparaître avec ls() .

sans autre ado:

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
répondu Ari B. Friedman 2012-10-23 12:19:41

voici un petit extrait pour l'exportation des tables vers LaTeX . Il change tous les noms de colonne en mode mathématique pour les nombreux rapports que j'écris. Le reste de ma .Rprofile est assez standard et la plupart du temps couvert ci-dessus.

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

amscols<-function(x){
    colnames(x) <- paste("$", colnames(x), "$", sep = "")
    x
}
7
répondu N8TRO 2014-11-16 21:25:02

voici le mien, y compris certaines des idées mentionnées.

Deux choses que vous pourriez vouloir regarder:

  • .définir.width () / w () mettez à jour votre largeur d'impression sur celle du terminal. Malheureusement, je n'ai pas trouvé le moyen de le faire automatiquement sur la documentation terminal resize - R mentionne que cela est fait par certains interprètes R.
  • l'histoire est sauvée à chaque fois avec un timestamp et le répertoire de travail

.

.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"))
   }
}
6
répondu Florian Bw 2010-12-14 12:35:11

j'ai mis mon thème couleur treillis dans mon profil. Voici deux autres modifications que j'utilise:

# 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)
5
répondu Kevin Wright 2009-08-12 15:55:15

j'ai une variable d'environnement R_USER_WORKSPACE qui pointe vers le répertoire supérieur de mes paquets. Dans. Rprofile I définit une fonction devlib qui définit le répertoire de travail (de sorte que data () fonctionne) et les sources .Fichiers R dans le sous-répertoire R. Il est assez similaire à la fonction L() de Hadley ci-dessus.

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
répondu Karsten W. 2010-04-03 18:35:14

j'ai trouvé deux fonctions vraiment nécessaires: D'abord quand j'ai mis debug() sur plusieurs fonctions et j'ai résolu le bug, donc je veux undebug() toutes les fonctions - pas une par une. La fonction undebug_all() ajoutée comme réponse acceptée ici est la meilleure.

Deuxièmement, lorsque j'ai défini de nombreuses fonctions et que je cherche un nom de variable spécifique, il est difficile de le trouver dans tous les résultats du ls() , y compris le les noms de fonction. La fonction lsnofun() affichée ici est vraiment bonne.

5
répondu Ali 2017-05-23 12:32:23