Pengguna Expert R, apa yang ada di. Profil Anda? [Tutup]


272

Saya selalu menemukan file profil startup orang lain yang berguna dan instruktif tentang bahasa. Selain itu, sementara saya memiliki beberapa penyesuaian untuk Bash dan Vim , saya tidak punya apa-apa untuk R.

Sebagai contoh, satu hal yang selalu saya inginkan adalah warna yang berbeda untuk input dan output teks di terminal jendela, dan mungkin bahkan penyorotan sintaksis.


29
Sayangnya pertanyaannya sudah ditutup, tetapi saya sangat berpikir bahwa jawaban yang benar adalah "tidak ada". Alih-alih menggunakan. Profil, saya sarankan menyimpan skrip inisialisasi di tingkat atas setiap proyek yang dipanggil pada awal setiap skrip di proyek Anda. Itu membuat pekerjaan Anda dapat direproduksi di pengguna lain melalui kontrol sumber. Tapi, ada beberapa jawaban cemerlang di sini! Saya akan memasukkan beberapa ide ini ke dalam skrip inisialisasi saya sendiri.
geneorama

18
@genene - Komentar yang baik tetapi saya akan sedikit memenuhi syarat jawaban Anda: .RprofileSeharusnya tidak termasuk kode yang mengubah hasil. Yang dapat Anda sertakan adalah hal-hal yang mengubah tampilan R (mis. options("width"=160)) Atau cermin CRAN default (mis options(repos = c(CRAN = "http://cran.rstudio.com")).). Namun, jangan memuat paket, mengubah opsi default fungsi yang digunakan secara teratur, menetapkan fungsi, dll. Kode Anda harus lengkap dan mereproduksi hasil tanpa .Rprofilefile khusus Anda .
user2503795

@geneorama, di mana saya harus meletakkan fungsi khusus? Mungkin di paket / namespace terpisah? Apakah itu mudah / mungkin di dalam .Rprofile?
Aaron McDaid

2
@ aaron-mcdaid Pertama @ user2503795 benar sekali, .Rprofileadalah tempat yang tepat untuk membuat perubahan aplikasi. Kedua, pertanyaan Anda harus menjadi pertanyaan SO yang terpisah. Saya mencoba menggunakan pola yang mirip dengan apa yang kami lakukan dalam proyek inspeksi makanan kami (lihat tata letak kode, dan langkah-langkah inisialisasi di bagian atas setiap skrip).
geneorama

Jawaban:


96

Ini milik saya. Ini tidak akan membantu Anda dengan pewarnaan, tetapi saya mendapatkannya dari ESS dan 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

Saya tidak yakin, tapi saya pikir sekarang X11.options telah digantikan oleh windows.options. Benarkah itu?
Manuel Ramón

Alih-alih membuat rdan rmmenggunakannya, Anda bisa meletakkannya di dalam local({ })blok. Jawaban yang bagus, saya suka konfigurasi X11!
Aaron McDaid

Ya, local({ ... })seperti yang ditunjukkan pada help(Startup)apa yang biasanya saya lakukan hari ini Rprofile.site. Belum membutuhkan hack X11 untuk sementara waktu :)
Dirk Eddelbuettel

59
options(stringsAsFactors=FALSE)

Meskipun saya tidak benar-benar memilikinya di. Profil saya, karena mungkin akan merusak kode penulis bersama saya, saya berharap itu adalah default. Mengapa?

1) Vektor karakter menggunakan lebih sedikit memori (tetapi hanya nyaris);

2) Lebih penting lagi, kami akan menghindari masalah seperti:

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

dan

> 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

Faktor-faktornya bagus ketika Anda membutuhkannya (misalnya menerapkan pemesanan dalam grafik) tetapi sering kali merepotkan.


Eduardo - Menarik, apa keuntungan dari tidak menggunakan faktor?
medriscoll

28
+1 Saya berharap ini adalah default di R.
Iterator

5
Perhatikan bahwa vektor karakter tampaknya hanya menggunakan sedikit memori (dua ratus byte atau lebih) pada sistem 32-bit. Pada sistem 64-bit, faktor yang digunakan lebih sedikit. stat.ethz.ch/pipermail/r-help/2012-August/321919.html
Ari B. Friedman

+1 Terima kasih telah menunjukkan beberapa masalah utama dengan faktor. Sistem format SAS memiliki banyak keunggulan dibandingkan ini, imo. Saat membaca dari teks, stringsAsFactors selalu disetel ke false. Namun, untuk transfer data, saya menghindari membaca dari spreadsheet jika memungkinkan.
AdamO

58

Saya benci mengetikkan kata lengkap 'kepala', 'ringkasan', 'nama' setiap waktu, jadi saya menggunakan alias.

Anda dapat memasukkan alias ke file .Rprofile Anda, tetapi Anda harus menggunakan path lengkap ke fungsi (mis. Utils :: head) jika tidak maka tidak akan berfungsi.

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

Sunting: untuk menjawab pertanyaan Anda, Anda dapat menggunakan paket pewarnaan untuk memiliki warna yang berbeda di terminal. Keren! :-)


8
Saya pikir nakan menggigit saya, secara pribadi, di bagian belakang saat debugging.
Roman Luštrik

2
Baik untuk penggunaan interaktif R, tetapi ini tidak portabel - jangan taruh dalam kode (tertulis) Anda!
Vince

25
Jika Anda pernah menghapus semua objek di lingkungan global Anda, maka alias di atas juga akan dihapus. Anda dapat mencegahnya dengan menyembunyikannya di lingkungan. .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
Saya mencoba ide bagus ini, tetapi saya sudah menggunakan s jadi saya lakukan sum <- base::summary. Itu bukan ide yang bagus.
Tom

1
re colorout: "" "Paket ini telah diarsipkan: ini menggunakan titik masuk non-API yang tidak diizinkan oleh kebijakan CRAN." ""
isomorphismes

26

Ini milik saya. Saya selalu menggunakan repositori cran utama, dan memiliki kode untuk membuatnya mudah untuk mendapatkan kode paket dalam pengembangan.

.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

Saya suka menyimpan riwayat perintah R saya dan menyediakannya setiap kali saya menjalankan R:

Dalam shell atau .bashrc:

export R_HISTFILE=~/.Rhistory

di. Profil:

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

23

Berikut adalah dua fungsi yang saya rasa berguna untuk bekerja dengan windows.

Yang pertama mengkonversi \s ke /.

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

Yang kedua membuka direktori kerja di jendela explorer baru.

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

2
Ini .repathadalah begitu masuk ke .Rprofile saya.
Waldir Leoncio

1
Saya menulis addin RStudio yang menyertakan fitur ini. Anda cukup menyalin jalur, klik menu dari RStudio, dan jalur yang dikonversi akan dimasukkan ke lokasi kursor Anda. Ini akan menghemat beberapa penekanan tombol.
dracodoc

1
Saya sangat membenci masalah jalur windows SOOO. Saya pikir saya mungkin punya solusi yang lebih baik. Saya menambahkan cuplikan. jadi yang harus saya lakukan adalah mengetikkan wpp lalu tekan tab dan jalur yang saya salin muncul. Ini kodenya. snippet wpp `r paste("\"", gsub("\\\\", "/", readClipboard()), "\"", sep = "")`
jamesguy0121

18

Saya mendapatkan ini, trik yang lebih dinamis untuk menggunakan lebar terminal penuh, yang mencoba membaca dari variabel lingkungan COLUMNS (di 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)}
)

Dengan cara ini R akan menggunakan lebar penuh bahkan saat Anda mengubah ukuran jendela terminal Anda.


1
Ketika COLUMNStidak diatur, Anda dapat mencoba width = as.integer(system('tput cols',intern=TRUE)sebagai penghalang.
shabbychef

17

Sebagian besar fungsi pribadi dan pustaka saya dimuat dalam skrip 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
Heh, saya berpikir tentang memberi nama G GUI "Arrr" - ini adalah cara yang jauh lebih mudah untuk menambahkan beberapa kebaikan bajak laut.
Sharpie

2
Terima kasih. Senang mengetahui bahwa saya bukan satu-satunya yang berpikir bajak laut ketika menembakkan R. :-) Saya bersumpah akan mengatasinya suatu hari nanti.
ars

1
Ini menjelaskan mengapa @ Pedang memasang kaitnya dalam skripnya ...
James

1
"Avast Ye" adalah Bajak Laut non-standar . Saya lebih suka Pirate saya agar sesuai dengan standar. Juga, itu berarti ~ "pegang erat-erat", jadi bukankah lebih masuk akal pada awalnya? : P
naught101

2
Sebenarnya itu sangat masuk akal pada akhirnya. Untuk saat keluar dari domain r kami kembali ke lingkungan yang lebih rendah di sekitarnya dan harus lagi berurusan dengan spreadsheet dan file teks ad-hoc.
kpierce8

17

Ini dari ~ / .Rprofile saya , dirancang untuk Mac dan Linux.

Ini membuat kesalahan lebih mudah dilihat.

options(showWarnCalls=T, showErrorCalls=T)

Saya benci pilihan menu CRAN, jadi set ke yang bagus.

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

Lebih banyak sejarah!

Sys.setenv(R_HISTSIZE='100000')

Berikut ini adalah untuk berjalan di Mac OSX dari terminal (yang saya lebih suka daripada R.app karena ini lebih stabil, dan Anda dapat mengatur pekerjaan Anda dengan direktori; juga pastikan untuk mendapatkan ~ / .inputrc yang baik ). Secara default, Anda mendapatkan tampilan X11, yang tidak terlihat bagus; ini sebagai gantinya memberikan tampilan kuarsa yang sama dengan GUI. The ifpernyataan seharusnya menangkap kasus ketika Anda menjalankan R dari terminal di 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)

Dan pramuat beberapa perpustakaan,

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

di mana util.r adalah tas acak dari barang-barang yang saya gunakan, sedang mengalami fluks.

Juga, karena orang lain menyebutkan lebar konsol, inilah cara saya melakukannya.

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)

Ini sebenarnya bukan .Rprofilekarena Anda harus menjalankannya kembali setiap kali Anda mengubah ukuran jendela terminal. Saya memilikinya di util.rkemudian saya hanya sumber yang diperlukan.


Jika saya membuka R di jendela xterm (dengan mengetik "R") haruskah itu membuka jendela seperti R gui? Saya tidak bisa membedakan apa pun dengan menambahkan ini. Profil ke direktori home saya.
Richard Herron

Tidak. Apa yang dilakukan adalah, ia menyimpan semua yang ada di konsol. Namun, ketika Anda merencanakan sesuatu, ia menggunakan perangkat layar yang lebih cerdas daripada perangkat layar X11 standar.
Brendan OConnor

Saya merasa seperti ini skrip ukuran jendela bisa bermanfaat menjadi sebuah paket. Apa kamu setuju?
isomorfisma

16

Ini milik saya:

.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
Anda tidak boleh memposting alamat proxy institusi Anda di situs web publik.
dalloliogm

13
dalloliogm, ini adalah alamat ip pribadi (non publik). Ada ratusan ribu komputer di seluruh dunia dengan alamat ip yang sama persis ini. Selamat mencoba mencari tahu yang mana milikku!
Alfred J Fazio

2
alfred, sudahkah Anda menemukan cara untuk mendefinisikan fungsi di. Profil (seperti yang Anda miliki di sini) tanpa membuatnya muncul ketika Anda melakukan ls (), selain memberi nama dengan inisial '.'? Saya memiliki terlalu banyak kekacauan dari fungsi yang saya tetapkan ketika saya ls (). Terima kasih
Keith

4
@Keith menugaskan mereka ke lingkungan dan melampirkan lingkungan ke jalur pencarian, lalu bersihkan. Jika fungsi-fungsi dalam file terpisah, Anda dapat sumber langsung ke lingkungan. Lihat ?new.env, ?assigndan ?sys.source. Jika Anda tidak dapat membuatnya berfungsi, poskan Q baru pada SO dan saya yakin Anda akan mendapatkan Jawaban.
Gavin Simpson

Anda my.as.Datemungkin digantikan oleh Lubridatepaket. Apakah saya benar?
isomorfisma

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

Saya sering memiliki rantai panggilan debug yang harus saya panggil dan membatalkan komentarnya bisa sangat membosankan. Dengan bantuan komunitas SO , saya mencari solusi berikut dan memasukkan ini ke dalam .Rprofile.site. # BROWSERada untuk Tugas Eclipse saya sehingga saya memiliki ikhtisar panggilan browser di jendela Task View.

# 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

Milik saya tidak terlalu mewah:

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

Saya melakukan banyak pekerjaan dari database mysql, jadi menghubungkan langsung adalah anugerah. Saya hanya berharap ada cara daftar database yang tersedia sehingga saya tidak harus mengingat semua nama yang berbeda.


4
konyol saya dbGetQuery (con, "show databases;")
Brandon Bertelsen

8

Posting Stephen Turner di. Profil memiliki beberapa alias yang berguna dan fungsi starter.

Saya sering menggunakan ht dan 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]

Ada paket bernama BurStMisc yang berisi fungsi yang disebut corneryang melakukan hal yang sama dengan hhfungsi Anda dan sedikit lebih. ;)
Waldir Leoncio

7

Ini milik saya, termasuk beberapa ide yang disebutkan.

Dua hal yang mungkin ingin Anda lihat:

  • .set.width () / w () perbarui lebar cetak Anda ke salah satu terminal. Sayangnya saya tidak menemukan cara untuk melakukan ini secara otomatis pada ukuran terminal - dokumentasi R menyebutkan ini dilakukan oleh beberapa penerjemah R.
  • histori disimpan setiap waktu bersama dengan stempel waktu dan direktori kerja

.

.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

Saya menggunakan yang berikut ini untuk mendapatkan cacheSweave (atau pgfSweave) untuk bekerja dengan tombol "Kompilasi PDF" di RStudio:

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


7

Ini milik saya. Tidak ada yang terlalu inovatif. Pikiran tentang mengapa pilihan tertentu:

  • Saya pergi dengan menetapkan default untuk stringsAsFactorskarena saya merasa sangat menguras untuk melewatinya sebagai argumen setiap kali saya membaca CSV masuk. Yang mengatakan, itu telah menyebabkan saya beberapa gangguan saat menggunakan kode yang ditulis pada komputer saya yang biasa di komputer yang tidak memiliki .Rprofile saya. Saya menyimpannya, meskipun, karena masalah yang disebabkannya pucat dibandingkan dengan masalah yang tidak diatur sehari-hari.
  • Jika Anda tidak memuat utilspaket sebelumnya options(error=recover), itu tidak dapat menemukan pulih ketika ditempatkan di dalam interactive()blok.
  • Saya menggunakan .dbpengaturan dropbox daripada options(dropbox=...)karena saya menggunakannya sepanjang waktu di dalam file.pathdan menghemat banyak pengetikan. Pemimpin .menjaga agar tidak muncul bersama ls().

Tanpa basa-basi:

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

Berikut sedikit cuplikan untuk menggunakan tabel ekspor ke LaTeX . Ini mengubah semua nama kolom ke mode matematika untuk banyak laporan yang saya tulis. Sisanya. Profil saya cukup standar dan sebagian besar dibahas di atas.

# 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

Saya mengatur tema warna kisi di profil saya. Berikut adalah dua tweak lainnya yang saya gunakan:

# 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
setwdPenggantian ini akan bekerja lebih baik dalam versi:utils::assignInNamespace("setwd",function(dir) {on.exit(setWindowTitle(base::getwd())); .Internal(setwd(dir))}, "base")
Marek

5

Saya memiliki variabel lingkungan R_USER_WORKSPACE yang menunjuk ke direktori teratas paket saya. Di. Profil saya mendefinisikan fungsi devlib yang menetapkan direktori kerja (sehingga data () berfungsi) dan sumber semua file .R di subdirektori R. Ini sangat mirip dengan fungsi l () Hadley di atas.

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

Saya menemukan dua fungsi yang sangat diperlukan: Pertama ketika saya telah menetapkan debug()beberapa fungsi dan saya telah menyelesaikan bug, jadi saya ingin undebug()semua fungsi - tidak satu per satu. The undebug_all()fungsi ditambahkan sebagai jawaban diterima di sini adalah yang terbaik.

Kedua, ketika saya telah mendefinisikan banyak fungsi dan saya mencari nama variabel tertentu, sulit untuk menemukannya dalam semua hasil ls(), termasuk nama fungsi. The lsnofun()Fungsi diposting di sini benar-benar baik.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.