Người dùng chuyên gia R, những gì trong .Rprofile của bạn? [đóng cửa]


271

Tôi luôn tìm thấy các tập tin hồ sơ khởi động của người khác cả hữu ích và hướng dẫn về ngôn ngữ. Hơn nữa, trong khi tôi có một số tùy chỉnh cho BashVim , tôi không có gì cho R.

Ví dụ, một điều tôi luôn muốn là các màu khác nhau cho văn bản đầu vào và đầu ra trong một thiết bị đầu cuối cửa sổ và thậm chí có thể làm nổi bật cú pháp.


29
Thật không may, câu hỏi đã bị đóng, nhưng tôi mạnh mẽ nghĩ rằng câu trả lời đúng là "không có gì". Thay vì sử dụng .Rprofile, tôi khuyên bạn nên giữ một tập lệnh khởi tạo ở cấp cao nhất của mọi dự án sẽ gọi nó ở đầu mỗi tập lệnh trong dự án của bạn. Điều đó giữ cho công việc của bạn có thể tái tạo trên các người dùng khác thông qua kiểm soát nguồn. Nhưng, có một số câu trả lời tuyệt vời ở đây! Tôi sẽ đưa một số ý tưởng này vào (các) kịch bản khởi tạo của riêng tôi.
genorama

18
@geneorama - Nhận xét tốt nhưng tôi sẽ đủ điều kiện trả lời của bạn một chút: Không .Rprofilenên bao gồm bất kỳ mã nào thay đổi kết quả. Những gì bạn có thể bao gồm là những thứ thay đổi diện mạo của R (ví dụ options("width"=160)) hoặc gương CRAN mặc định (ví dụ options(repos = c(CRAN = "http://cran.rstudio.com"))). Tuy nhiên, không tải các gói, thay đổi các tùy chọn mặc định của các hàm được sử dụng thường xuyên, xác định hàm, v.v. Mã của bạn phải được khép kín và tái tạo kết quả mà không cần .Rprofiletệp cụ thể của bạn .
dùng2503795

@geneorama, tôi nên đặt chức năng tùy chỉnh ở đâu? Có lẽ trong một gói / không gian tên riêng biệt? Là dễ dàng / có thể trong vòng .Rprofile?
Aaron McDaid

2
@ aaron-mcdaid Đầu tiên @ user2503795 là hoàn toàn đúng, .Rprofilelà một nơi thích hợp để thực hiện thay đổi ứng dụng. Thứ hai, câu hỏi của bạn nên là một câu hỏi SO riêng biệt. Tôi cố gắng sử dụng một mô hình tương tự như những gì chúng tôi đã làm trong dự án kiểm tra thực phẩm của chúng tôi (xem cách bố trí mã và các bước khởi tạo ở đầu mỗi tập lệnh).
genorama

Câu trả lời:


96

Đây là của tôi. Nó sẽ không giúp bạn tô màu nhưng tôi có được điều đó từ ESS và 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

Tôi không chắc chắn, nhưng tôi nghĩ rằng bây giờ X11.options đã được thay thế bởi windows.options. Điều đó có đúng không?
Manuel Ramón

Thay vì tạo rvà sau đó rm, bạn có thể đặt nó vào trong một local({ })khối. Câu trả lời tốt, tôi yêu cấu hình X11!
Aaron McDaid

Vâng, local({ ... })như thể hiện trong help(Startup)là những gì tôi thường làm trong những ngày này Rprofile.site. Không cần hack X11 trong một thời gian :)
Dirk Eddelbuettel 27/08/2015

59
options(stringsAsFactors=FALSE)

Mặc dù tôi không thực sự có nó trong .Rprofile của mình, vì nó có thể phá vỡ mã của đồng tác giả, tôi ước nó là mặc định. Tại sao?

1) Các vectơ ký tự sử dụng ít bộ nhớ hơn (nhưng chỉ hầu như không);

2) Quan trọng hơn, chúng tôi sẽ tránh các vấn đề như:

> 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

Các yếu tố rất tuyệt vời khi bạn cần chúng (ví dụ như thực hiện đặt hàng trong biểu đồ) nhưng hầu hết thời gian đều gây phiền toái.


Eduardo - Thú vị, những lợi thế của việc không sử dụng các yếu tố là gì?
medriscoll

28
+1 Tôi ước đây là mặc định trong R.
Iterator

5
Lưu ý rằng các vectơ ký tự dường như chỉ sử dụng ít bộ nhớ hơn (hai trăm byte hoặc hơn) trên các hệ thống 32 bit. Trên các hệ thống 64 bit, các yếu tố sử dụng ít hơn đáng kể. stat.ethz.ch/pipermail/r-help/2012-August/321919.html
Ari B. Friedman

+1 Cảm ơn bạn đã chỉ ra một số vấn đề chính với các yếu tố. Hệ thống định dạng của SAS có nhiều lợi thế hơn thế, imo. Khi đọc từ văn bản, chuỗiAsFactors luôn được đặt thành false. Tuy nhiên, để truyền dữ liệu, tôi tránh đọc từ bảng tính bất cứ khi nào có thể.
AdamO

58

Tôi ghét phải gõ các từ đầy đủ 'đầu', 'tóm tắt', 'tên' mỗi lần, vì vậy tôi sử dụng bí danh.

Bạn có thể đặt bí danh vào tệp .Rprofile của mình, nhưng bạn phải sử dụng đường dẫn đầy đủ đến hàm (ví dụ utils :: head) nếu không nó sẽ không hoạt động.

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

EDIT: để trả lời câu hỏi của bạn, bạn có thể sử dụng gói colorout để có các màu khác nhau trong thiết bị đầu cuối. Mát mẻ! :-)


8
Tôi nghĩ rằng nsẽ cắn tôi, cá nhân, ở phía sau trong khi gỡ lỗi.
Roman Luštrik

2
Tốt cho việc sử dụng R tương tác, nhưng những thứ này không di động - đừng đặt chúng vào mã (bằng văn bản) của bạn!
Vince

25
Nếu bạn từng xóa tất cả các đối tượng trong môi trường toàn cầu của mình, thì các bí danh ở trên cũng sẽ bị xóa. Bạn có thể ngăn chặn điều đó bằng cách giấu chúng trong một môi trường. .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
Tôi đã thử ý tưởng tuyệt vời này, nhưng tôi đã sử dụng s nên tôi đã làm sum <- base::summary. Đó không phải là một ý tưởng tuyệt vời.
Tom

1
re colorout: "" "Gói này đã được lưu trữ: nó đã sử dụng các điểm nhập không phải API không được chính sách CRAN cho phép." ""
isomorphismes

26

Đây là của tôi. Tôi luôn sử dụng kho lưu trữ cran chính và có mã để dễ dàng tìm nguồn mã gói phát triển.

.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

Tôi thích lưu lịch sử lệnh R của mình và có sẵn mỗi lần tôi chạy R:

Trong trình bao hoặc .bashrc:

export R_HISTFILE=~/.Rhistory

trong .Rprofile:

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

23

Đây là hai chức năng tôi thấy tiện dụng khi làm việc với windows.

Đầu tiên chuyển đổi \s thành /.

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

Thứ hai mở thư mục làm việc trong một cửa sổ thám hiểm mới.

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

2
Điều này .repathnhư vậy vào .Rprofile của tôi.
Waldir Leoncio

1
Tôi đã viết một addin RStudio có tính năng này. Bạn chỉ cần sao chép đường dẫn, nhấp vào menu từ RStudio và đường dẫn được chuyển đổi sẽ được chèn vào vị trí con trỏ của bạn. Điều này sẽ lưu một số tổ hợp phím.
dracodoc

1
Tôi ghét các vấn đề đường dẫn windows SOOO nhiều. Tôi nghĩ rằng tôi có thể có một giải pháp tốt hơn. Tôi đã thêm một đoạn. vì vậy tất cả những gì tôi phải làm là gõ wpp sau đó nhấn tab và đường dẫn được sao chép của tôi hiển thị. Đây là mã. snippet wpp `r paste("\"", gsub("\\\\", "/", readClipboard()), "\"", sep = "")`
jamesguy0121

18

Tôi đã có được điều này, mẹo năng động hơn để sử dụng toàn bộ chiều rộng thiết bị đầu cuối, cố gắng đọc từ biến môi trường COLUMNS (trên 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)}
)

Bằng cách này, R sẽ sử dụng toàn bộ chiều rộng ngay cả khi bạn thay đổi kích thước cửa sổ đầu cuối.


1
Khi COLUMNSkhông được đặt, bạn có thể thử width = as.integer(system('tput cols',intern=TRUE)làm điểm dừng.
shabbychef

17

Hầu hết các chức năng cá nhân và thư viện được tải của tôi đều nằm trong tập lệnh Rfifts.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, tôi nghĩ về việc đặt tên cho GUI R "Arrr" - đây là một cách dễ dàng hơn nhiều để thêm một số tính tốt của cướp biển.
Sharpie

2
Ah cảm ơn bạn. Thật tốt khi biết tôi không phải là người duy nhất nghĩ rằng cướp biển khi nổ súng R. :-) Tôi thề tôi sẽ vượt qua nó một trong những ngày này.
ars

1
Nó giải thích lý do tại sao @Dirk đã thiết lập móc nối của mình trong kịch bản của mình ...
James

1
"Avast Ye" là Pirate không chuẩn . Tôi thích Pirate của tôi để phù hợp với tiêu chuẩn. Ngoài ra, nó có nghĩa là ~ "giữ chặt", vì vậy nó sẽ không có ý nghĩa hơn khi bắt đầu? : P
ness101

2
Trên thực tế nó làm cho ý nghĩa hoàn hảo ở cuối. Để thoát khỏi miền r, chúng tôi trở lại môi trường nhỏ hơn xung quanh nó và phải xử lý lại các bảng tính và tệp văn bản đặc biệt.
kpierce8

17

Đây là từ ~ / .Rprofile của tôi , được thiết kế cho Mac và Linux.

Những lỗi này dễ nhìn thấy hơn.

options(showWarnCalls=T, showErrorCalls=T)

Tôi ghét sự lựa chọn menu CRAN, vì vậy hãy đặt thành một cái tốt.

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

Thêm lịch sử!

Sys.setenv(R_HISTSIZE='100000')

Sau đây là để chạy trên Mac OSX từ thiết bị đầu cuối (mà tôi rất thích R.app vì nó ổn định hơn và bạn có thể sắp xếp công việc của mình theo thư mục; cũng đảm bảo có được ~ / .inputrc tốt ). Theo mặc định, bạn nhận được một màn hình X11, trông không đẹp mắt; điều này thay vào đó cho một màn hình thạch anh giống như GUI. Câu iflệnh được cho là bắt trường hợp khi bạn chạy R từ thiết bị đầu cuối trên máy 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)

Và tải trước một vài thư viện,

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

nơi tận dụng là một túi ngẫu nhiên của những thứ tôi sử dụng, dưới thông lượng.

Ngoài ra, vì những người khác đã đề cập đến chiều rộng của bàn điều khiển, đây là cách tôi làm điều đó.

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)

Điều này thực sự không phải .Rprofilevì bạn phải chạy lại nó mỗi khi bạn thay đổi kích thước cửa sổ terminal. Tôi có nó util.rsau đó tôi chỉ cần nguồn nó khi cần thiết.


Nếu tôi mở R trong cửa sổ xterm (bằng cách gõ "R") thì nó có mở cửa sổ giống R gui không? Tôi không thể nói bất kỳ sự khác biệt nào bằng cách thêm .Rprofile này vào thư mục nhà của tôi.
Richard Herron

Không. Cái này là gì, nó giữ mọi thứ trong bàn điều khiển. Tuy nhiên, khi bạn vẽ đồ thị, nó sử dụng một thiết bị hiển thị thông minh hơn thiết bị hiển thị X11 mặc định.
Brendan OConnor

Tôi cảm thấy như các kịch bản thay đổi kích thước cửa sổ này có thể hữu ích là một gói. Bạn có đồng ý không?
đẳng cấu

16

Đây là của tôi:

.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
bạn không nên đăng địa chỉ proxy của tổ chức của bạn trên một trang web công cộng.
dalloliogm

13
dalloliogm, đây là một địa chỉ IP riêng (không công khai). Có hàng trăm ngàn máy tính trên khắp thế giới có cùng địa chỉ IP này. Chúc may mắn khi cố gắng tìm ra cái nào là của tôi!
Alfred J Fazio

2
alfred, bạn đã tìm thấy một cách để xác định các hàm trong .Rprofile (như bạn có ở đây) mà không cần chúng hiển thị khi bạn thực hiện một ls (), ngoài việc đặt tên bằng chữ cái đầu tiên '.'? Tôi có quá nhiều lộn xộn từ các hàm mà tôi đã xác định khi tôi ls (). Cảm ơn
Keith

4
@Keith gán chúng cho một môi trường và gắn môi trường vào đường dẫn tìm kiếm, sau đó dọn sạch. Nếu các chức năng nằm trong một tệp riêng biệt, bạn có thể nguồn trực tiếp vào môi trường. Xem ?new.env, ?assign?sys.source. Nếu bạn không thể làm cho nó hoạt động, hãy đăng Q mới trên SO và tôi chắc chắn bạn sẽ nhận được Câu trả lời.
Gavin Simpson

Gói của bạn my.as.Datecó thể được thay thế bởi Lubridategói. Tôi có đúng không
đẳng cấu

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

Tôi thường có một chuỗi các cuộc gọi gỡ lỗi mà tôi cần gọi và việc bỏ qua chúng có thể rất tẻ nhạt. Với sự giúp đỡ của cộng đồng SO , tôi đã tìm giải pháp sau đây và đưa giải pháp này vào .Rprofile.site. # BROWSERcó sẵn cho các Nhiệm vụ Eclipse của tôi để tôi có cái nhìn tổng quan về các cuộc gọi trình duyệt trong cửa sổ Dạng xem nhiệm vụ.

# 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

Của tôi không quá ưa thích:

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

Tôi làm rất nhiều công việc từ cơ sở dữ liệu mysql, vì vậy kết nối ngay lập tức là một ơn trời. Tôi chỉ muốn có một cách liệt kê các cơ sở dữ liệu có sẵn để tôi không phải nhớ tất cả các tên khác nhau.


4
ngớ ngẩn với tôi dbGetQuery (con, "hiển thị cơ sở dữ liệu;")
Brandon Bertelsen

8

Bài đăng của Stephen Turner trên .Rprofiles có một số bí danh và hàm khởi động hữu ích.

Tôi thấy mình sử dụng ht và hh của mình thường xuyên.

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

Có một gói được gọi là BurStMisc chứa một hàm được gọi là chức năng cornertương tự như hhchức năng của bạn và một chút nữa. ;)
Waldir Leoncio

7

Đây là của tôi, bao gồm một số ý tưởng được đề cập.

Hai điều bạn có thể muốn xem xét:

  • .set. thong () / w () cập nhật chiều rộng in của bạn lên một trong các thiết bị đầu cuối. Thật không may, tôi không tìm thấy cách nào để thực hiện việc này một cách tự động khi thay đổi kích thước thiết bị đầu cuối - Tài liệu R đề cập đến việc này được thực hiện bởi một số thông dịch viên R.
  • lịch sử được lưu mỗi lần cùng với dấu thời gian và thư mục làm việc

.

.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

Tôi sử dụng cách sau để lấy cacheSweave (hoặc pgfSweave) để làm việc với nút "Biên dịch PDF" trong RStudio:

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


7

Đây là của tôi. Không có gì quá sáng tạo. Suy nghĩ về lý do tại sao lựa chọn cụ thể:

  • Tôi đã cài đặt mặc định cho stringsAsFactors vì tôi thấy rất mệt mỏi khi chuyển nó thành đối số mỗi khi tôi đọc CSV. Điều đó nói rằng, nó đã gây ra cho tôi một số lỗi nhỏ khi sử dụng mã được viết trên máy tính thông thường của tôi trên máy tính. không có .Rprofile của tôi. Mặc dù vậy, tôi đang giữ nó vì những rắc rối mà nó đã gây ra nhạt so với những rắc rối không được đặt ra hàng ngày.
  • Nếu bạn không tải utilsgói trước đó options(error=recover), nó không thể tìm thấy recovery khi được đặt bên tronginteractive() khối.
  • Tôi đã sử dụng .dbcho cài đặt dropbox của mình hơn là options(dropbox=...)vì tôi sử dụng nó mọi lúc bên trong file.pathvà nó giúp tiết kiệm nhiều thao tác gõ. Hàng đầu .giữ cho nó không xuất hiện với ls().

Nếu không có thêm rắc rối:

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

Đây là một đoạn nhỏ để sử dụng xuất bảng sang LaTeX . Nó thay đổi tất cả các tên cột thành chế độ toán học cho nhiều báo cáo tôi viết. Phần còn lại của .Rprofile của tôi khá chuẩn và chủ yếu được đề cập ở trên.

# 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

Tôi đặt chủ đề màu mắt cáo trong hồ sơ của tôi. Đây là hai điều chỉnh khác tôi sử dụng:

# 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
Sự setwdthay thế này sẽ hoạt động tốt hơn trong phiên bản:utils::assignInNamespace("setwd",function(dir) {on.exit(setWindowTitle(base::getwd())); .Internal(setwd(dir))}, "base")
Marek

5

Tôi có một biến môi trường R_USER_WORKSPACE trỏ đến thư mục trên cùng của các gói của tôi. Trong .Rprofile tôi định nghĩa một hàm devlib để đặt thư mục làm việc (để dữ liệu () hoạt động) và nguồn tất cả các tệp .R trong thư mục con R. Nó khá giống với hàm l () của Hadley ở trên.

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

Tôi tìm thấy hai chức năng thực sự cần thiết: Đầu tiên khi tôi thiết lập debug()một số chức năng và tôi đã khắc phục lỗi, vì vậy tôi muốn undebug()tất cả các chức năng - không phải từng chức năng một. Các undebug_all()chức năng được thêm vào như câu trả lời được chấp nhận ở đây là tốt nhất.

Thứ hai, khi tôi đã xác định nhiều hàm và tôi đang tìm một tên biến cụ thể, thật khó để tìm thấy nó trong tất cả các kết quả của ls(), bao gồm cả tên hàm. Các lsnofun()chức năng được đăng ở đây là thực sự tốt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.