전문가 R 사용자, .Rprofile에 무엇이 있습니까? [닫은]


271

나는 항상 다른 사람들의 시작 프로필 파일이 언어에 대해 유용하고 유익한 것을 발견했습니다. 또한 BashVim에 대한 사용자 정의가 있지만 R에는 아무것도 없습니다.

예를 들어, 내가 항상 원했던 한 가지는 윈도우 터미널의 입력 및 출력 텍스트의 색상이 다르며 심지어 구문 강조입니다.


29
불행히도 그 질문은 끝났지 만 정답은 "아무것도 없다"고 강력하게 생각합니다. .Rprofile을 사용하는 대신 프로젝트의 모든 스크립트 시작 부분에서 초기화 스크립트를 호출하는 모든 프로젝트의 최상위 레벨에 초기화 스크립트를 유지하는 것이 좋습니다. 그러면 소스 제어를 통해 다른 사용자에게도 작업을 재현 할 수 있습니다. 그러나 여기에는 훌륭한 답변이 있습니다! 이 아이디어 중 일부를 내 초기화 스크립트에 넣을 것입니다.
geneorama

18
@geneorama-좋은 의견이지만 답변을 약간받을 것 .Rprofile입니다. 결과를 변경하는 코드는 포함해서는 안됩니다. 포함 할 수있는 것은 R (예 options("width"=160):) 또는 기본 CRAN 미러 (예 :) 의 모양을 변경하는 것입니다 options(repos = c(CRAN = "http://cran.rstudio.com")). 그러나 패키지를로드하거나 정기적으로 사용되는 함수의 기본 옵션을 변경하거나 함수 등을 정의하지 마십시오. 코드는 자체 포함되어야하며 특정 .Rprofile파일 없이 결과를 재현해야 합니다.
user2503795

@geneorama, 그렇다면 사용자 정의 기능을 어디에 두어야합니까? 아마도 별도의 패키지 / 네임 스페이스에 있습니까? 내에서 쉬운가요 .Rprofile?
Aaron McDaid

2
@ aaron-mcdaid 먼저 @ user2503795는 .Rprofile응용 프로그램을 변경하기에 적절한 장소입니다. 둘째, 귀하의 질문은 별도의 SO 질문이어야합니다. 식품 검사 프로젝트 에서했던 것과 유사한 패턴을 사용하려고합니다 (각 스크립트 상단의 코드 레이아웃 및 초기화 단계 참조).
geneorama

답변:


96

여기 내 꺼야 착색에 도움이되지 않지만 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

확실하지 않지만 X11.options가 windows.options로 바뀌 었다고 생각합니다. 그게 사실입니까?
Manuel Ramón

그것을 만들고 r나서 대신에 rm, 그것을 local({ })블록 안에 넣을 수 있습니다 . 좋은 대답이지만 X11 구성을 좋아합니다!
Aaron McDaid

예,에 local({ ... })표시된 것처럼 help(Startup)내가 요즘에하는 일입니다 Rprofile.site. :) 동안의 X11 해킹 필요하지 않은
더크 Eddelbuettel

59
options(stringsAsFactors=FALSE)

내 .Rprofile에 실제로는 없지만 공동 저자의 코드가 손상 될 수 있기 때문에 이것이 기본값이기를 바랍니다. 왜?

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

요인은 필요할 때 유용하지만 (예 : 그래프에서 순서 구현) 대부분 성가신 일입니다.


Eduardo-흥미 롭습니다. 요인을 사용하지 않으면 어떤 이점이 있습니까?
medriscoll

28
+1 이것이 R의 기본값 이었으면 좋겠다.
Iterator

5
문자형 벡터는 32 비트 시스템에서 더 적은 메모리 (200 바이트 정도)를 사용하는 것 같습니다. 64 비트 시스템에서는 사용률이 상당히 낮습니다. stat.ethz.ch/pipermail/r-help/2012-August/321919.html
Ari B. Friedman

+1 요인과 관련된 주요 문제를 지적 해 주셔서 감사합니다. SAS의 포맷 시스템은 이에 비해 많은 이점이 있습니다. 텍스트를 읽을 때 stringsAsFactors는 항상 false로 설정됩니다. 그러나 데이터 전송의 경우 가능한 한 스프레드 시트에서 읽는 것을 피합니다.
AdamO

58

나는 매번 전체 단어 'head', 'summary', 'names'를 입력하는 것을 싫어하므로 별칭을 사용합니다.

별칭을 .Rprofile 파일에 넣을 수 있지만 함수의 전체 경로 (예 : utils :: head)를 사용해야합니다. 그렇지 않으면 작동하지 않습니다.

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

편집 : 귀하의 질문에 대답하기 위해, 당신이 사용할 수있는 colorout의 단자에 다른 색을 가지고 패키지를. 멋있는! :-)


8
n디버깅하는 동안 개인적으로 후부에서 나를 물게 될 것이라고 생각 합니다.
Roman Luštrik

2
인터랙티브 한 R 사용에는 적합하지만 이식성이 없습니다. 코드를 작성하지 마십시오!
Vince

25
글로벌 환경에서 모든 객체를 삭제 한 경우 위의 별칭도 삭제됩니다. 이를 환경에 숨겨 방지 할 수 있습니다. .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
나는이 위대한 아이디어를 시도했지만 이미 사용했습니다 sum <- base::summary. 그건 아니었다 그런 좋은 생각.
Tom

1
re colorout: "" "이 패키지는 보관되었습니다 : CRAN 정책에서 허용하지 않는 비 API 진입 점을 사용했습니다." ""
동 형사상

26

내 꺼야 나는 항상 주요 크랜 저장소를 사용하고 개발중인 패키지 코드를 쉽게 소스 할 수있는 코드를 가지고 있습니다.

.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

R 명령 기록을 저장하고 R을 실행할 때마다 사용할 수 있도록하는 것이 좋습니다.

쉘 또는 .bashrc에서 :

export R_HISTFILE=~/.Rhistory

.Rprofile에서 :

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

23

다음은 창 작업에 유용한 두 가지 기능입니다.

첫 번째는 \s를 로 변환합니다 /.

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

2
.repath있다 그래서 내 .Rprofile에 점점.
Waldir Leoncio 2019

1
이 기능이 포함 된 RStudio addin 을 작성 했습니다 . 경로를 복사하고 RStudio에서 메뉴를 클릭하면 변환 된 경로가 커서 위치에 삽입됩니다. 이것은 약간의 키 입력을 저장해야합니다.
dracodoc

1
나는 Windows 경로 문제가 너무 싫어. 더 나은 해결책이 있다고 생각합니다. 스 니펫을 추가했습니다. 그래서 내가해야 할 일은 wpp를 입력 한 다음 tab을 누르면 복사 된 경로가 나타납니다. 코드는 다음과 같습니다. snippet wpp `r paste("\"", gsub("\\\\", "/", readClipboard()), "\"", sep = "")`
jamesguy0121 2016 년

18

COLUMNS 환경 변수 (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이 전체 너비를 사용합니다.


1
COLUMNS설정되지 않은, 당신은 시도 할 수 width = as.integer(system('tput cols',intern=TRUE)백스톱있다.
shabbychef

17

내 개인 함수와로드 된 라이브러리의 대부분은 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
허, 나는 R GUI "Arrr"의 이름을 짓는 것에 대해 생각했다-이것은 해적 선을 추가하는 훨씬 쉬운 방법입니다.
Sharpie

2
아 고마워 내가 R을 발사 할 때 해적을 생각하는 유일한 사람이 아님을 아는 것이 좋다. :-) 나는 요즘 그것을 극복 할 것이라고 맹세한다.
ars

1
@Dirk가 자신의 스크립트에서 자신의 갈고리를 설정 한 이유를 설명합니다.
James

1
"Avast Ye"는 비표준 해적 입니다. 나는 표준에 따라 해적을 선호합니다. 또한 ~ "꽉 잡아"라는 의미이므로 처음에는 더 의미가 없습니까? : P
naught101

2
실제로 그것은 끝에 완벽하게 이해됩니다. r 도메인을 빠져 나가기 위해 우리는 주변 환경으로 돌아가서 스프레드 시트와 임시 텍스트 파일을 다시 처리해야합니다.
kpierce8

17

다음 은 Mac 및 Linux 용으로 설계된 ~ / .Rprofile 입니다.

이를 통해 오류를보다 쉽게 ​​확인할 수 있습니다.

options(showWarnCalls=T, showErrorCalls=T)

나는 CRAN 메뉴 선택을 싫어하므로 좋은 것으로 설정하십시오.

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

더 많은 역사!

Sys.setenv(R_HISTSIZE='100000')

다음은 터미널에서 맥 OSX에서 실행입니다 (더 안정적이기 때문에 크게 R.app 선호하는, 당신은 디렉토리하여 작업을 구성 할 수 있습니다, 또한 좋은 얻을 수 있는지 확인하십시오 ~ / .inputrc를 ). 기본적으로 X11 디스플레이가 표시됩니다. 대신 GUI와 같은 쿼츠 디스플레이를 제공합니다. 이 if문장은 Mac의 터미널에서 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있으며 필요에 따라 그것을 제공합니다.


xterm 창에서 "R"을 입력하여 R을 열면 R gui와 같은 창을 열어야합니까? 이 .Rprofile을 홈 디렉토리에 추가하여 차이점을 알 수 없습니다.
Richard Herron

아니요.이 작업은 콘솔에 모든 것을 유지합니다. 그러나 사물을 플롯 할 때는 기본 X11 디스플레이 장치보다 더 스마트 한 디스플레이 장치를 사용합니다.
Brendan OConnor

이 창 크기 조정 스크립트가 유용한 패키지가 될 수 있다고 생각합니다. 동의하십니까?
isomorphismes

16

여기 내 것이 있습니다 :

.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
기관의 대리인 주소를 공개 웹 사이트에 게시해서는 안됩니다.
dalloliogm

13
dalloliogm, 이것은 개인 (비 공용) IP 주소입니다. 이 동일한 IP 주소를 가진 전 세계에는 수십만 대의 컴퓨터가 있습니다. 어느 것이 나의 것인지 알아 내려고 노력해라!
Alfred J Fazio

2
alfred, .Rprofile에서 함수를 정의하는 방법을 찾았습니다 (여기에서와 같이). 내가 ls () 때 정의한 함수에서 너무 혼란 스럽습니다. 감사합니다
Keith

4
@Keith는 환경에 할당하고 환경을 검색 경로에 연결 한 다음 정리합니다. 기능이 별도의 파일에 있으면 환경으로 직접 소스 할 수 있습니다. 를 참조하십시오 ?new.env, ?assign하고 ?sys.source. 작동하지 않으면 SO에 새로운 Q를 게시하면 답변을 얻을 수 있습니다.
Gavin Simpson

귀하는 my.as.Date에 의해 대체 될 수있는 Lubridate패키지입니다. 내가 맞아?
동 형사상

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

나는 종종 호출 해야하는 디버그 호출 체인을 가지고 있으며 주석 처리를 제거하는 것은 매우 지루할 수 있습니다. SO 커뮤니티 의 도움으로 다음 솔루션으로 가서 이것을 내 솔루션에 삽입했습니다 .Rprofile.site. # BROWSER작업보기 창에서 브라우저 호출에 대한 개요를 볼 수 있도록 Eclipse 작업이 있습니다.

# 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

광산은 너무 화려하지 않습니다.

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

나는 mysql 데이터베이스에서 많은 작업을 수행하므로 즉시 연결하는 것이 신의 선물이다. 나는 사용 가능한 데이터베이스를 나열하는 방법이 있었기 때문에 다른 이름을 모두 기억할 필요는 없었습니다.


4
바보 같은 dbGetQuery (con, "show database;")
Brandon Bertelsen

8

.Rprofiles에 대한 Stephen Turner의 게시물 에는 몇 가지 유용한 별칭과 스타터 기능이 있습니다.

나는 그의 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]

함수와 같은 기능을하는 BurStMisc 패키지 가 있습니다 . ;)cornerhh
Waldir Leoncio 2014

7

언급 된 아이디어 중 일부를 포함하여 내 것이 있습니다.

보고 싶은 두 가지 :

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

7

다음을 사용하여 cacheSweave (또는 pgfSweave)가 RStudio의 "Compile PDF"버튼과 작동하도록합니다.

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


7

내 꺼야 너무 혁신적인 것은 없습니다. 왜 특정 선택에 대한 생각 :

  • stringsAsFactorsCSV를 읽을 때마다 인수로 전달하기가 매우 어려워지기 때문에 기본값을 설정 했습니다. 내 .Rprofile이 없습니다. 그래도 문제를 일으켜 매일 사용하지 않는 문제와 비교할 때 창백 해졌습니다.
  • utils전에 패키지를 로드하지 않으면 블록 options(error=recover)안에 배치 할 때 복구를 찾을 수 없습니다 interactive().
  • 내가 사용하는 .db내 보관이보다는 설정 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)
    }
}

7

다음은 LaTeX로 테이블을 내보내는 데 사용되는 작은 스 니펫입니다 . 내가 작성한 많은 보고서에 대해 모든 열 이름을 수학 모드로 변경합니다. 내 .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
}

5

내 프로필에서 격자 색 테마를 설정했습니다. 내가 사용하는 다른 두 가지 조정이 있습니다.

# 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
setwd대체품은 다음 버전에서 더 잘 작동합니다.utils::assignInNamespace("setwd",function(dir) {on.exit(setWindowTitle(base::getwd())); .Internal(setwd(dir))}, "base")
Marek

5

패키지의 최상위 디렉토리를 가리키는 환경 변수 R_USER_WORKSPACE가 있습니다. .Rprofile에서 나는 작업 디렉토리를 설정하고 (data ()가 작동하도록) R 서브 디렉토리의 모든 .R 파일을 소싱하는 devlib 함수를 정의합니다. 위의 Hadley의 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

두 가지 기능이 정말로 필요하다는 것을 알았습니다. 먼저 debug()여러 기능 을 설정 하고 버그를 해결 했을 때 undebug()모든 기능을 하나씩 원합니다 . 여기에undebug_all() 허용 된 답변으로 추가 된 기능 이 가장 좋습니다.

둘째, 많은 함수를 정의하고 특정 변수 이름을 찾을 때 ls()함수 이름을 포함하여의 모든 결과 내에서 찾기가 어렵습니다 . 여기lsnofun()게시 된 기능 이 정말 좋습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.