Frage

Ich habe immer Startprofildateien von anderen Menschen nützlich und lehrreich über die Sprache gefunden. Hinzu kommt, dass ich einige Anpassungen haben für Bash und Vim , ich habe nichts für R.

Zum Beispiel, eine Sache, die ich wollte immer verschiedene Farben zum Ein- und Ausgabe von Text in einem Fenster Terminal, und vielleicht sogar Syntaxhervorhebung.

War es hilfreich?

Lösung

Hier ist mein. Es wird nicht Sie mit der Färbung helfen, aber ich bekommen, dass von ESS und 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

Andere Tipps

Ich hasse die ganzen Worte ‚Kopf‘ zu geben, ‚Zusammenfassung‘, ‚Name‘ jedes Mal, so dass ich Aliase verwenden.

Sie können Aliase in Ihre .Rprofile Datei setzen, aber man muss den vollständigen Pfad zu der Funktion verwenden (z utils :: Kopf), sonst wird es nicht funktionieren.

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

EDIT: Ihre Frage zu beantworten, können Sie das colorout Paket verschiedene Farben im Terminal zu haben. Cool! : -)

options(stringsAsFactors=FALSE)

Obwohl ich eigentlich nicht haben, dass in meinem .Rprofile, weil es vielleicht bricht meine Koautoren Code, ich wünschte, es war der Standard. Warum?

1) Zeichenvektoren verwenden weniger Speicher (aber nur gerade noch);

2) Noch wichtiger ist, würden wir Probleme vermeiden, wie:

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

und

> 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

Faktoren sind groß, wenn Sie sie brauchen aber ein Ärgernis die meiste Zeit (zum Beispiel in Graphen Umsetzung Bestellung).

Hier ist meine. Ich habe immer das Haupt cran-Repository verwenden, und den Code zu machen, haben einfach zu Quelle in-Entwicklungspaket Code.

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

ich wie meine R-Befehl Geschichte Speicher und nachdem er verfügbar jedes Mal, wenn ich Lauf R:

In der Shell oder Bashrc:

export R_HISTFILE=~/.Rhistory

in .Rprofile:

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

Hier sind zwei Funktionen, die ich praktisch finden mit Fenstern zu arbeiten.

Die ersten wandelt die \s zu /.

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

Die zweite öffnet das Arbeitsverzeichnis in einem neuen Explorer-Fenster.

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

Ich habe diese, dynamischen Trick volle Anschlussbreite zu verwenden, das von der Umgebungsvariable COLUMNS (unter Linux) zu lesen versucht:

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

Auf diese Weise R wird die volle Breite verwenden, auch wenn Sie Ihre Terminal-Fenster ändern.

Die meisten meiner persönlichen Funktionen und geladenen Bibliotheken sind im Rfunctions.r Skript

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

Hier ist von meinem ~ / .Rprofile , die für Mac und Linux.

Diese machen Fehler leichter zu sehen.

options(showWarnCalls=T, showErrorCalls=T)

Ich hasse die CRAN Menüwahl, so auf einen gut.

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

Mehr Geschichte!

Sys.setenv(R_HISTSIZE='100000')

Im Folgenden ist auf Mac OSX vom Endgerät für den Betrieb (die ich sehr zu R.app bevorzugen, weil es stabiler ist, und Sie können Ihre Arbeit Verzeichnis organisieren, auch sicher, einen guten bekommen machen ~ / .inputrc ). Standardmäßig erhalten Sie einen X11-Display, das nicht so schön aussieht; dies gibt stattdessen einen Quarz-Display gleiche wie die GUI. Die if Erklärung soll den Fall fangen, wenn Sie R aus dem Terminal auf Mac laufen lassen.

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)

Und vorzuladen wenige Bibliotheken,

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

util.r ist eine zufällige Tasche der Sachen, die ich verwenden unter Fluss.

Auch, weil andere Leute Konsole Breite zu erwähnen, hier ist, wie ich es tun.

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)

Dies ist eigentlich nicht in .Rprofile, weil Sie haben wieder führen Sie es jedes Mal, wenn die Terminal-Fenster ändern. Ich habe es in util.r dann ich Quelle es ebenso notwendig.

Hier ist meine:

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

Jetzt data.frames Anzeige etwas wie ‚Kopf‘, nur ohne den Typ ‚Kopf‘

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

(von Wie machen ‚Kopf‘ automatisch angewandt werden ausgeben? )

Ich habe oft eine Kette von Debug-Anrufe Ich muss sie anrufen und uncommenting kann sehr mühsam sein. Mit Hilfe der Gemeinschaft SO, ging ich für die folgende Lösung und diese in eingefügt mein .Rprofile.site. # BROWSER ist es für meine Eclipse-Aufgaben, so dass ich einen Überblick über die Browser-Anrufe in der Task-View-Fenster haben.

# 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

Meine ist nicht zu extravagant:

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

Ich habe eine Menge Arbeit von MySQL-Datenbanken, so verbindet, ist sofort ein Geschenk des Himmels. Ich wünschte nur, es war ein Weg, um die avaialble Datenbanken der Auflistung, damit ich nicht alle verschiedenen Namen zu erinnern.

Stephen Turners Beitrag auf .Rprofiles hat mehrere nützliche Aliase und Starterfunktionen.

Ich finde mich mit seinem ht und hh oft.

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

Hier ist meins, darunter auch einige der genannten Ideen.

Zwei Dinge, die Sie sehen möchten:

  • .set.width () / w () Ihre Druckbreite zum einen der Terminal aktualisieren. Leider habe ich nicht einen Weg finden, das auf Terminal Resize automatisch zu tun -. R Dokumentation erwähnt dies von einigen R Dolmetscher gemacht wird
  • Geschichte wird jedes Mal, zusammen mit einem Zeitstempel und das Arbeitsverzeichnis gespeichert

.

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

Ich verwende die folgende cacheSweave (oder pgfSweave) zur Arbeit mit dem "Compile PDF" -Button in RStudio zu bekommen:

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

-Mine umfasst options(menu.graphics=FALSE), weil ich wie auf Deaktivieren / Unterdrückungs tcltk Popup für CRAN Spiegel-Auswahl R .

Hier ist meine. Nichts zu innovativ. Gedanken darüber, warum bestimmte Entscheidungen:

  • Ich ging ein Standard für stringsAsFactors mit der Einstellung, weil ich finde, es extrem Trockenlegung es als Argument ich in eine CSV lesen jedes Mal passieren. Das heißt, es hat mir schon einige kleinere Ärger verursacht, wenn auf einem Computer-Code geschrieben auf meinem üblichen Computer, die nicht meine .Rprofile haben. Ich halte es aber, wie die Probleme es im Vergleich zu den Schwierigkeiten verursacht hat blass nicht Set jeden Tag zu verursachen verwendet.
  • Wenn Sie vor utils die options(error=recover) Paket werden nicht geladen, kann es nicht wiederherstellen finden, wenn innerhalb eines interactive() Block platziert.
  • Ich benutzte .db für meine Dropbox Einstellung anstatt options(dropbox=...), weil ich es die ganze Zeit innerhalb file.path verwenden und es spart viel Tipparbeit. Der führende . hält es mit ls() angezeigt wird.

Ohne weitere Umschweife:

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

Hier ist ein kleiner Ausschnitt für den Export Tabellen LaTeX . Es ändert sich alle Spaltennamen Mathematik-Modus für die vielen Berichte, die ich schreibe. Der Rest meiner .Rprofile ist ziemlich Standard und meist bedeckt oben.

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

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

ich mein Gitter Farbe Thema in meinem Profil. Hier sind zwei weitere Tweaks ich benutze:

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

ich eine Umgebungsvariable R_USER_WORKSPACE haben, die Punkte auf das oberste Verzeichnis meiner Pakete. In .Rprofile definiere ich eine Funktion devlib, die das Arbeitsverzeichnis enthält (so, dass die Daten () funktioniert) und Quellen alle .R Dateien im R-Unterverzeichnis. Es ist ganz ähnlich wie Hadleys l () Funktion oben.

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

Ich fand zwei Funktionen wirklich notwendig: Erstens, wenn ich Satz debug() auf mehrere Funktionen, und ich habe den Fehler behoben, so dass ich alle Funktionen undebug() wollen - nicht eins nach dem anderen. Die undebug_all() Funktion wie die akzeptierte Antwort hinzugefügt hier die beste ist.

Zweitens, wenn ich viele Funktionen definiert, und ich bin auf der Suche nach einem bestimmten Variablennamen, ist es schwer, es in allen Ergebnissen der der ls() zu finden, einschließlich der Funktionsnamen. Die lsnofun() Funktion geschrieben hier ist wirklich gut.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top