سؤال

لقد وجدت دائما ملفات بدء التشغيل من الأشخاص الآخرين مفيدة ومفيدة عن اللغة. علاوة على ذلك، في حين أن لدي بعض التخصيص ل سحق و همة, ليس لدي شيء ل R.

على سبيل المثال، شيء واحد أرغب فيه دائما هو الألوان المختلفة لنص الإدخال والإخراج في محطة نافذة، وربما تسليط الضوء على بناء الجملة.

هل كانت مفيدة؟

المحلول

تلك هي خاصتي. لن يساعدك في التلوين ولكني أحصل على ذلك من 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

نصائح أخرى

أنا أكره كتابة الكلمات الكاملة "الرأس"، "ملخص"، "أسماء" في كل مرة، لذلك يمكنني استخدام الأسماء المستعارة.

يمكنك وضع الأسماء المستعارة في ملف .rprofile الخاص بك، ولكن عليك استخدام المسار الكامل إلى الوظيفة (مثل Utils :: Head) وإلا فلن يعمل ذلك.

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

تحرير: للإجابة على سؤالك، يمكنك استخدام تلوين حزمة للحصول على ألوان مختلفة في المحطة. بارد! :-)

options(stringsAsFactors=FALSE)

على الرغم من أنني لا أمتلك في الواقع في بلدي .rprofile، لأنه قد يكسر رمز CoAuthors الخاص بي، أتمنى لو كان الافتراضي. لماذا ا؟

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

العوامل رائعة عندما تحتاج إليها (مثل تنفيذ الطلب في الرسوم البيانية) ولكن الإزعاج معظم الوقت.

هنا لي الألغام. أنا دائما استخدام مستودع المحرز الرئيسي، ولديك رمز لجعل من السهل على رمز حزمة حزمة في التنمية.

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

أحب حفظ تاريخ أمري الخاص بي ووجودها متوفرة في كل مرة أركض فيها R:

في قذيفة أو .bashrc:

export R_HISTFILE=~/.Rhistory

في .rprofile:

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

فيما يلي وظيفتان أجده مفيدا للعمل مع Windows.

الأول يحول \ب /.

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

لدي هذا، خدعة أكثر ديناميكية لاستخدام عرض المحطة الكاملة، والتي تحاول أن تقرأ من متغير بيئة الأعمدة (على 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 العرض الكامل حتى أثناء تغيير حجم نافذة المحطة الطرفية.

معظم وظائفي الشخصية والمكتبات المحملة موجودة في البرنامج النصي

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

هنا من بلدي ~ / .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، والتي لا تبدو لطيفة؛ هذا بدلا من ذلك يعطي شاشة الكوارتز نفس واجهة المستخدم الرسومية. ال if من المفترض أن يصاب البيان بالقضية عند تشغيل 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 ثم أنا فقط مصدرها حسب الضرورة.

هنا لي:

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

اجعل البيانات. أعرض الإضراب مثل "الرأس"، فقط دون الحاجة إلى كتابة "الرأس"

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

(من كيفية جعل "الرأس" يتم تطبيقها تلقائيا لإخراج؟ )

غالبا ما يكون لدي سلسلة من مكالمات تصحيح الأخطاء التي أحتاج إلى الاتصال بها ويمكن أن تكون ممتعة للغاية. بمساعدة حتى المجتمع, ذهبت للحل التالي وأدرج هذا في بلدي .Rprofile.site. # BROWSER هل هناك لمهام الكسوف الخاصة بي بحيث لدي نظرة عامة على مكالمات المتصفح في نافذة عرض المهام.

# 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

الألغام ليست خيالية جدا:

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

أقوم بالكثير من العمل من قواعد بيانات MySQL، لذا فإن الاتصال على الفور هو إلهة. أتمنى أن تكون هناك طريقة لإدراج قواعد بيانات Avaialble حتى ألا يجب أن أتذكر كل الأسماء المختلفة.

وظيفة ستيفن تيرنر على .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]

هنا لي، بما في ذلك بعض الأفكار المذكورة.

شيئين قد ترغب في إلقاء نظرة عليه:

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

يمكنني استخدام ما يلي للحصول على CachesWeave (أو pgfsweave) للعمل مع زر "Compile PDF" في RSTudio:

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

الألغام تشمل options(menu.graphics=FALSE) لانني احب ان تعطيل / Suppress TCLTK المنبثقة للاختيار مرآة كران في ص.

هنا لي الألغام. لا شيء مبتكر للغاية. الأفكار حول لماذا خيارات معينة:

  • ذهبت مع وضع الافتراضي ل stringsAsFactors لأنني أجد أنه يستنزف للغاية لتمريرها كحجة في كل مرة أقرأ فيها CSV. مما قال، فقد تسبب لي بالفعل بعض الغضب البسيط عند استخدام التعليمات البرمجية المكتوبة على جهاز الكمبيوتر المعتاد على جهاز كمبيوتر لم يكن لديك .rprofile. أنا أبقيها، على الرغم من أن المشاكل التي تسببت فيها شاحبة بالمشاكل التي لا تملكها كل يوم تستخدم للتسبب.
  • إذا كنت لا تحميل utils حزمة قبل options(error=recover), ، لا يمكن العثور على التعافي عند وضعها داخل interactive() منع.
  • انا إستعملت .db لإعداد بلدي dropbox بدلا من 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)
    }
}

إليك مقتطف صغير لاستخدام طاولات تصدير إلى اللاتكس. وبعد إنه يغير جميع أسماء الأعمدة إلى وضع الرياضيات للتقارير العديدة التي أكتبها. ما تبقى من بلدي .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
}

أقوم بتعيين موضوع لون شعرية في ملف التعريف الخاص بي. فيما يلي قرصان آخران أستخدمه:

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

لدي بيئة متغير r_user_workspace التي تشير إلى أعلى الدليل في حزم بلدي. في .rprofile، أعرف وظيفة devlib التي تحدد دليل العمل (بحيث تعمل البيانات ()) ومصادر جميع ملفات .r في الدليل الفرعي ص. انها تشبه تماما وظيفة L () L () Hadley أعلاه.

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

لقد وجدت وظيفتان ضرورية حقا: أولا عندما قمت بتعيين debug() في العديد من الوظائف وحلبت الخطأ، لذلك أريد undebug() جميع الوظائف - وليس واحدا تلو الآخر. ال undebug_all() إضافة وظيفة كإجابة مقبولة هنا هو الأفضل.

ثانيا، عندما حددت العديد من الوظائف وأبحث عن اسم متغير معين، من الصعب العثور عليه في جميع نتائج ls(), ، بما في ذلك أسماء الوظائف. ال lsnofun() وظيفة نشر هنا هو جيد حقا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top