Опытные пользователи R, что находится в Вашем.Rprofile? [закрытый]

Это, кажется, метод программирования, которое позволяет программисту разворачивать то, что находится на самом деле на языке, чтобы более тесно следовать за их исходным намерением, вместо того, чтобы вызвать намерение программистов в ограниченный синтаксис языка.

Это явно упоминает LISP как язык, который поддерживает это, таким образом, я предположил бы, что Вы читаете на этом большом языке:) Макросы LISP точно, что описано в статье, позволив Вам неограниченно долго развернуть язык для покрытия почти чего-либо, что Вы хотели бы выразить. (Довольно общий результат больших систем LISP - то, что Вы заканчиваете с предметно-ориентированным языком, который очень хорош для записи определенных приложений, т.е. записи, что текстовой процессор заканчивается с текстовым процессором определенный язык).

Для Вашей последней части, да LISP (и таким образом Намеренное Программирование) используется в некоторых проектах. Paul Graham является великим сторонником LISP, и другие примеры его включают исходного Бандикута Катастрофического отказа (игровая система создания объекта была создана в LISP для этого, включая компилятор PlayStation LISP)

266
задан 5 revs, 4 users 82% 16 November 2014 в 11:21
поделиться

13 ответов

Вот мой. Это не поможет вам с раскраской, но я получил это от 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
93
ответ дан 23 November 2019 в 02:24
поделиться

Большинство моих личных функций и загруженных библиотек находятся в сценарии 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")')
17
ответ дан 23 November 2019 в 02:24
поделиться

Вот мой. Я всегда использую основной репозиторий 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"))  
}
26
ответ дан 23 November 2019 в 02:24
поделиться

Мой не слишком изящный:

# 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
ответ дан 23 November 2019 в 02:24
поделиться

Я установил цветовую тему решетки в своем профиле. Вот две другие настройки, которые я использую:

# 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
ответ дан 23 November 2019 в 02:24
поделиться

Here's from my ~/.Rprofile, designed for Mac and Linux.

These make errors easier to see.

options(showWarnCalls=T, showErrorCalls=T)

I hate the CRAN menu choice, so set to a good one.

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

More history!

Sys.setenv(R_HISTSIZE='100000')

The following is for running on Mac OSX from the terminal (which I greatly prefer to R.app because it's more stable, and you can organize your work by directory; also make sure to get a good ~/.inputrc). By default, you get an X11 display, which doesn't look as nice; this instead gives a quartz display same as the GUI. The if statement is supposed to catch the case when you're running R from the terminal on 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)

And preload a few libraries,

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

where util.r is a random bag of stuff I use, under flux.

Also, since other people were mentioning console width, here's how I do it.

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)

This actually isn't in .Rprofile because you have to re-run it every time you resize the terminal window. I have it in util.r then I just source it as necessary.

17
ответ дан 23 November 2019 в 02:24
поделиться

Мне нравится сохранять историю команд R и делать ее доступной каждый раз, когда я запускаю R:

В оболочке или .bashrc:

export R_HISTFILE=~/.Rhistory

в .Rprofile:

.Last <- function() {
        if (!any(commandArgs()=='--no-readline') && interactive()){
                require(utils)
                try(savehistory(Sys.getenv("R_HISTFILE")))
        }
}
26
ответ дан 23 November 2019 в 02:24
поделиться
options(stringsAsFactors=FALSE)

Хотя на самом деле у меня нет этого в моем .R-профиле, поскольку это может нарушить код моих соавторов, я бы хотел, чтобы это было по умолчанию. Почему?

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

Факторы хороши, когда они вам нужны (например, реализация упорядочения в графах), но чаще всего доставляют неудобства.

57
ответ дан 23 November 2019 в 02:24
поделиться

Вот мои:

.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
ответ дан 23 November 2019 в 02:24
поделиться

Я ненавижу вводить полные слова «голову», «Сводка», «Имена» каждый раз, поэтому я использую псевдонимы.

Вы можете поместить псевдонимы в ваш файл .rprofile, но вы должны использовать полный путь к функции (например, Utils :: head) в противном случае это не будет работать.

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

Редактировать: Чтобы ответить на ваш вопрос, вы можете использовать пакет Colorout , чтобы иметь разные цвета в терминале. Здорово! : -)

58
ответ дан 23 November 2019 в 02:24
поделиться

У меня есть этот, более динамичный трюк, чтобы использовать полную ширину терминала, которая пытается прочитать из переменных среды столбцов (на 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 будет использовать полную ширину, даже если вы разместите свой окно терминала Отказ

18
ответ дан 23 November 2019 в 02:24
поделиться

У меня есть переменная окружения R_USER_WORKSPACE, которая указывает на верхний каталог моих пакетов. В .Rprofile я определяю функцию devlib, которая устанавливает рабочий каталог (чтобы работал data ()) и отправляет все файлы .R в подкаталог R. Это очень похоже на функцию Хэдли 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")
5
ответ дан 23 November 2019 в 02:24
поделиться
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, поэтому немедленное подключение - это находка. Я только хотел бы, чтобы был способ перечислить доступные базы данных, чтобы мне не пришлось запоминать все разные имена.

8
ответ дан 23 November 2019 в 02:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: