ผู้ใช้ R ผู้เชี่ยวชาญมีอะไรในโปรไฟล์ของคุณ [ปิด]


271

ฉันพบไฟล์โปรไฟล์เริ่มต้นของผู้อื่นอยู่เสมอทั้งมีประโยชน์และให้คำแนะนำเกี่ยวกับภาษา ยิ่งกว่านั้นในขณะที่ฉันมีการปรับแต่งบางอย่างสำหรับBashและVimแต่ฉันไม่มีอะไรที่จะเป็นอาร์

ตัวอย่างเช่นสิ่งหนึ่งที่ฉันต้องการเสมอคือสีที่ต่างกันสำหรับอินพุตและเอาต์พุตข้อความในเทอร์มินัลหน้าต่างและอาจมีการเน้นไวยากรณ์


29
น่าเสียดายที่คำถามถูกปิด แต่ฉันคิดว่าคำตอบที่ถูกต้องคือ "ไม่มีอะไร" แทนที่จะใช้. โปรไฟล์ฉันขอแนะนำให้รักษาสคริปต์การเริ่มต้นที่ระดับสูงสุดของทุกโครงการที่ได้รับการเรียกใช้ที่จุดเริ่มต้นของทุกสคริปต์ในโครงการของคุณ ที่ทำให้งานของคุณสามารถทำซ้ำได้กับผู้ใช้รายอื่นผ่านการควบคุมแหล่งที่มา แต่มีคำตอบที่ยอดเยี่ยมอยู่ที่นี่! ฉันจะใส่แนวคิดเหล่านี้ในสคริปต์การเริ่มต้นของฉันเอง
genorama

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 First @ 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 มันเป็นเรื่องจริงเหรอ?
มานูเอลราโมน

แทนที่จะสร้างrแล้วrmทำคุณสามารถใส่มันเข้าไปในlocal({ })บล็อก คำตอบที่ดีแม้ว่าฉันชอบ config X11!
Aaron McDaid

ใช่local({ ... })ดังที่แสดงhelp(Startup)เป็นสิ่งที่ฉันมักจะทำในวันRprofile.siteนี้ ไม่ต้องการแฮ็ค X11 สักพัก :)
Dirk Eddelbuettel

59
options(stringsAsFactors=FALSE)

แม้ว่าฉันไม่ได้มีสิ่งนั้นในแฟ้มประวัติของฉันเพราะอาจทำให้รหัสผู้เขียนร่วมของฉันฉันหวังว่าจะเป็นค่าเริ่มต้น ทำไม?

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 บิต ปัจจัยของระบบ 64 บิตนั้นใช้งานน้อยกว่ามาก stat.ethz.ch/pipermail/r-help/2012-August/321919.html
Ari B. Friedman

+1 ขอบคุณที่ชี้ประเด็นสำคัญบางประการเกี่ยวกับปัจจัยต่างๆ ระบบการจัดรูปแบบของ SAS มีข้อดีหลายประการเช่นนี้ เมื่ออ่านจากข้อความสตริงAsFactorsจะถูกตั้งค่าเป็นเท็จเสมอ อย่างไรก็ตามสำหรับการถ่ายโอนข้อมูลฉันหลีกเลี่ยงการอ่านจากสเปรดชีตหากเป็นไปได้
AdamO

58

ฉันเกลียดการพิมพ์คำว่า 'หัว', 'สรุป', 'ชื่อ' ทุกครั้งดังนั้นฉันจึงใช้นามแฝง

คุณสามารถใส่นามแฝงลงในไฟล์. profile ของคุณ แต่คุณต้องใช้พา ธ เต็มไปยังฟังก์ชั่น (เช่น utils :: head) มิฉะนั้นไฟล์จะไม่ทำงาน

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

แก้ไข: เพื่อตอบคำถามของคุณคุณสามารถใช้แพคเกจcoloroutเพื่อให้มีสีต่างกันในเครื่อง เย็น! :-)


8
ฉันคิดว่าฉันnจะกัดฉันส่วนตัวในด้านหลังในขณะที่การแก้จุดบกพร่อง
Roman Luštrik

2
ใช้ได้ดีสำหรับการใช้งานแบบอินเทอร์แอคทีฟ แต่สิ่งเหล่านี้ไม่ได้พกพาได้อย่าใส่ไว้ในรหัส (เขียน) ของคุณ!
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)
เควินไรท์

12
ฉันพยายามคิดที่ดีนี้ sum <- base::summaryแต่ฉันใช้แล้วของผมเลย นั่นไม่ใช่ความคิดที่ยอดเยี่ยม
Tom

1
เรื่องcolorout: "" "แพคเกจนี้ถูกเก็บถาวร: มันใช้จุดเข้าใช้งานที่ไม่ใช่ API ที่ไม่ได้รับอนุญาตจากนโยบาย CRAN" ""
isomorphismes

26

นี่คือของฉัน ฉันมักจะใช้แหล่งเก็บข้อมูล 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

ฉันชอบบันทึกประวัติคำสั่ง R และให้พร้อมใช้งานทุกครั้งที่เรียกใช้ R:

ในเชลล์หรือ. bashrc:

export R_HISTFILE=~/.Rhistory

ใน. โปรไฟล์:

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

23

นี่คือฟังก์ชั่นสองอย่างที่ฉันพบว่ามีประโยชน์สำหรับการทำงานกับ 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')
 }

ที่สองเปิดไดเรกทอรีการทำงานในหน้าต่าง explorer ใหม่

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

2
นี้.repathเป็นเพื่อให้ได้รับใน .Rprofile ของฉัน
Waldir Leoncio

1
ฉันเขียนaddt RStudioที่รวมคุณลักษณะนี้ไว้ คุณเพียงแค่คัดลอกเส้นทางคลิกเมนูจาก RStudio และเส้นทางที่แปลงแล้วจะถูกแทรกลงในตำแหน่งเคอร์เซอร์ของคุณ สิ่งนี้ควรบันทึกการกดแป้นบางอย่าง
dracodoc

1
ฉันเกลียดปัญหาเส้นทาง Windows มาก SOOO ฉันคิดว่าฉันอาจมีทางออกที่ดีกว่า ฉันเพิ่มตัวอย่าง ดังนั้นสิ่งที่ฉันต้องทำคือพิมพ์ wpp จากนั้นกดแท็บและเส้นทางที่คัดลอกของฉันปรากฏขึ้น นี่คือรหัส snippet wpp `r paste("\"", gsub("\\\\", "/", readClipboard()), "\"", sep = "")`
jamesguy0121

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
อ้าขอบคุณ มันเป็นการดีที่จะรู้ว่าฉันไม่ใช่คนเดียวที่คิดว่าโจรสลัดเมื่อยิงขึ้นอาร์ :-) ฉันสาบานว่าฉันจะผ่านมันไปซักวันหนึ่ง
ARS

1
มันอธิบายว่าทำไม @Dirk คือการตั้งค่าเบ็ดของเขาในบทของเขา ...
เจมส์

1
"Avast Ye" คือไม่ได้มาตรฐานโจรสลัด ฉันชอบโจรสลัดของฉันเพื่อให้สอดคล้องกับมาตรฐาน นอกจากนี้ยังหมายถึง ~ "ยึดมั่น" ดังนั้นจะไม่เหมาะสมกว่าตอนเริ่มต้นหรือ : P
naught101

2
จริงๆแล้วมันทำให้รู้สึกสมบูรณ์แบบในตอนท้าย สำหรับการออกจากโดเมน r เรากลับไปสู่สภาพแวดล้อมที่น้อยลงและต้องจัดการสเปรดชีตและไฟล์ข้อความแบบเฉพาะกิจอีกครั้ง
kpierce8

17

นี่คือจาก~ / .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 ซึ่งดูไม่ดีนัก นี่จะแทนการแสดงผลควอตซ์เช่นเดียวกับ GUI ifงบควรจะจับกรณีที่เมื่อคุณกำลังทำงาน R จากขั้วของ 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)

และโหลดไลบรารีบางส่วนล่วงหน้า

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ตอนนั้นฉันแค่หามันตามความจำเป็น


ถ้าฉันเปิด R ในหน้าต่าง xterm (โดยพิมพ์ "R") มันควรจะเปิดหน้าต่างที่คล้ายกับ R gui หรือไม่? ฉันไม่สามารถบอกความแตกต่างได้โดยการเพิ่มโปรไฟล์นี้ลงในโฮมไดเร็กตอรี่ของฉัน
Richard Herron

ไม่สิ่งนี้คือมันเก็บทุกอย่างไว้ในคอนโซล อย่างไรก็ตามเมื่อคุณวางแผนสิ่งต่าง ๆ อุปกรณ์จะใช้อุปกรณ์แสดงผลที่ชาญฉลาดกว่าอุปกรณ์แสดงผล X11 ที่เป็นค่าเริ่มต้น
เบรนแดน 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 เดียวกันนี้ โชคดีที่พยายามค้นหาว่าอันไหนเป็นของฉัน!
อัลเฟรดเจฟาซิโอ

2
อัลเฟรดคุณเคยพบวิธีการกำหนดฟังก์ชั่นใน. Profiles (ดังที่คุณมีที่นี่) หรือไม่โดยที่พวกมันแสดงขึ้นมาเมื่อคุณใช้ ls () นอกเหนือจากการตั้งชื่อด้วย '.' เบื้องต้น ฉันมีความยุ่งเหยิงมากเกินไปจากฟังก์ชั่นที่ฉันกำหนดไว้เมื่อฉัน ls () ขอบคุณ
Keith

4
@Keith กำหนดให้กับสภาพแวดล้อมและแนบสภาพแวดล้อมกับเส้นทางการค้นหาแล้วล้าง หากฟังก์ชั่นอยู่ในไฟล์แยกต่างหากคุณสามารถแหล่งที่มาโดยตรงในสภาพแวดล้อม ดู?new.env, และ?assign ?sys.sourceหากคุณไม่สามารถทำงานให้โพสต์คำถามใหม่ทาง SO และฉันมั่นใจว่าคุณจะได้คำตอบ
Gavin Simpson

คุณmy.as.Dateอาจถูกแทนที่ด้วยLubridateแพคเกจ ฉันถูกไหม?
isomorphismes

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
}

11

ทำให้ data.frames แสดงค่อนข้างเหมือน 'หัว' เท่านั้นโดยไม่ต้องพิมพ์ 'หัว'

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

(จากวิธีการทำให้ 'หัว' ถูกนำไปใช้โดยอัตโนมัติกับการส่งออก? )


10

ฉันมักจะมีสายการดีบักที่ฉันต้องการโทรและการไม่แสดงข้อคิดเห็นพวกเขาอาจจะน่าเบื่อมาก ด้วยความช่วยเหลือของชุมชนดังนั้น.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 ดังนั้นการเชื่อมต่อทันทีเป็นสวรรค์ ฉันหวังว่าจะมีวิธีในการแสดงรายการฐานข้อมูล avaialble ดังนั้นฉันจึงไม่จำเป็นต้องจำชื่อที่แตกต่างกันทั้งหมด


4
silly me dbGetQuery (แย้ง "แสดงฐานข้อมูล;")
Brandon Bertelsen

8

โพสต์ของ 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ที่มีฟังก์ชั่นที่เรียกว่าcornerซึ่งทำหน้าที่เหมือนกับhhฟังก์ชั่นของคุณและอีกมาก ;)
Waldir Leoncio

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) เพื่อทำงานกับปุ่ม "Compile PDF" ใน RStudio:

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


7

นี่คือของฉัน ไม่มีอะไรใหม่เกินไป คิดว่าทำไมตัวเลือกโดยเฉพาะ:

  • ฉันไปกับการตั้งค่าเริ่มต้นสำหรับstringsAsFactorsเพราะฉันพบว่ามันระบายมากที่จะผ่านมันเป็นข้อโต้แย้งทุกครั้งที่ฉันอ่าน CSV ในที่กล่าวว่ามันทำให้ฉันเดือดร้อนเล็กน้อยเมื่อใช้รหัสที่เขียนบนคอมพิวเตอร์ปกติของฉันบนคอมพิวเตอร์ที่ ฉันไม่มี. profile ของฉัน แม้ว่าฉันจะเก็บมันไว้เนื่องจากปัญหาที่เกิดขึ้นนั้นทำให้หน้าซีดเมื่อเปรียบเทียบกับปัญหาที่ไม่ได้ตั้งไว้ทุกวัน
  • หากคุณไม่ได้โหลด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

นี่คือตัวอย่างเล็ก ๆ น้อย ๆ สำหรับการใช้งานการส่งออกตารางน้ำยาง มันเปลี่ยนชื่อคอลัมน์ทั้งหมดเป็นโหมดคณิตศาสตร์สำหรับรายงานจำนวนมากที่ฉันเขียน ส่วนที่เหลือของโปรไฟล์ของฉันนั้นค่อนข้างธรรมดาและครอบคลุมเป็นส่วนใหญ่

# 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 ซึ่งชี้ไปที่ไดเรกทอรีบนสุดของแพ็คเกจของฉัน ใน. โปรไฟล์ฉันกำหนดฟังก์ชัน devlib ซึ่งตั้งไดเรกทอรีทำงาน (เพื่อให้ data () ทำงาน) และแหล่งที่มาของไฟล์. R ทั้งหมดในไดเรกทอรีย่อย R มันค่อนข้างคล้ายกับฟังก์ชัน 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")

5

ฉันพบว่าทั้งสองฟังก์ชั่นจำเป็นจริงๆ: ครั้งแรกเมื่อฉันตั้งค่าdebug()หลายฟังก์ชั่นและฉันได้แก้ไขข้อผิดพลาดดังนั้นฉันจึงต้องการundebug()ฟังก์ชั่นทั้งหมด - ไม่ใช่ทีละตัว undebug_all()ฟังก์ชั่นเพิ่มเป็นคำตอบที่ได้รับการยอมรับที่นี่เป็นที่ดีที่สุด

ประการที่สองเมื่อฉันได้กำหนดฟังก์ชั่นมากมายและฉันกำลังมองหาชื่อตัวแปรที่เฉพาะเจาะจงมันยากที่จะหามันในผลลัพธ์ทั้งหมดของ the ls()รวมถึงชื่อฟังก์ชั่น lsnofun()ฟังก์ชั่นโพสต์ที่นี่เป็นสิ่งที่ดีจริงๆ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.