বিশেষজ্ঞ আর ব্যবহারকারীগণ, আপনার .R প্রোফাইলে কী আছে? [বন্ধ]


271

ভাষা সম্পর্কে দরকারী এবং শিক্ষামূলক উভয়ই আমি অন্য ব্যক্তির স্টার্টআপ প্রোফাইল ফাইলগুলি খুঁজে পেয়েছি। তদ্ব্যতীত , আমার কাছে বাশ এবং ভিমের জন্য কিছু কাস্টমাইজেশন থাকার সময় আমার কাছে আর এর জন্য কিছুই নেই

উদাহরণস্বরূপ, একটি জিনিস যা আমি সবসময় চেয়েছিলাম তা হ'ল উইন্ডো টার্মিনালের ইনপুট এবং আউটপুট পাঠ্যের জন্য বিভিন্ন রঙ এবং এমনকি সিনট্যাক্স হাইলাইটও।


29
দুর্ভাগ্যক্রমে প্রশ্নটি বন্ধ, তবে আমি দৃ strongly়ভাবে মনে করি যে সঠিক উত্তরটি "কিছুই নয়"। .আর প্রোফাইল ব্যবহারের পরিবর্তে, আমি আপনার প্রকল্পের প্রতিটি স্ক্রিপ্টের শুরুতে অনুরোধ করা প্রতিটি প্রকল্পের শীর্ষ স্তরে একটি সূচনা স্ক্রিপ্ট রাখার পরামর্শ দিই। এটি আপনার ব্যবহারকে উত্স নিয়ন্ত্রণের মাধ্যমে অন্য ব্যবহারকারীদের কাছে পুনরুত্পাদনযোগ্য রাখে। তবে, এখানে কিছু উজ্জ্বল উত্তর রয়েছে! আমি এই ধারণাগুলির কিছুটি আমার নিজের আরম্ভের স্ক্রিপ্টে রাখব putting
জেনারোমা 11'14

18
@ জেনোরামা - ভাল মন্তব্য তবে আমি আপনার উত্তরটি কিছুটা যোগ্য করে তুলব: .Rprofileফলাফলগুলিতে পরিবর্তন হওয়া কোনও কোড অন্তর্ভুক্ত করা উচিত নয়। আপনি যে জিনিসটি অন্তর্ভুক্ত করতে পারেন তা হ'ল আর (যেমন options("width"=160)) বা ডিফল্ট ক্র্যান মিরর (উদাঃ options(repos = c(CRAN = "http://cran.rstudio.com"))) এর চেহারা পরিবর্তন করে । তবে, প্যাকেজগুলি লোড করবেন না, নিয়মিত ব্যবহৃত ফাংশনগুলির ডিফল্ট বিকল্পগুলি পরিবর্তন করুন, ফাংশন সংজ্ঞায়িত করুন Your আপনার কোডটি স্ব-অন্তর্ভুক্ত হওয়া উচিত এবং আপনার নির্দিষ্ট .Rprofileফাইল ব্যতীত ফলাফলগুলি পুনরুত্পাদন করা উচিত ।
ব্যবহারকারী2503795

@ জেনোরাম, আমি তখন কাস্টম ফাংশনগুলি কোথায় রাখব? সম্ভবত একটি পৃথক প্যাকেজ / নেমস্পেসে? এর মধ্যে কি সহজ / সম্ভব .Rprofile?
অ্যারন ম্যাকডেইড

2
@ অ্যারন-এমসিডিএইড প্রথম @ ব্যবহারকারী2503795 একেবারে ঠিক, .Rprofileঅ্যাপ্লিকেশন পরিবর্তন করার জন্য উপযুক্ত জায়গা। দ্বিতীয়ত, আপনার প্রশ্নটি পৃথক এসও প্রশ্ন হওয়া উচিত। আমি আমাদের খাদ্য পরিদর্শন প্রকল্পে যা করেছি তার অনুরূপ একটি প্যাটার্ন ব্যবহার করার চেষ্টা করি (প্রতিটি স্ক্রিপ্টের শীর্ষে কোড বিন্যাস এবং সূচনা পদক্ষেপ দেখুন)।
জেনারোমা

উত্তর:


96

আমারটা এখানে. এটি রঙে আপনাকে সাহায্য করবে না তবে আমি এটি ইএসএস এবং ইমাস থেকে পেয়েছি ...

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 উইন্ডোজ.ওপশন দ্বারা প্রতিস্থাপিত হয়েছে। এটা কি সত্যি?
ম্যানুয়েল রামন

এটি তৈরি rএবং তারপরে তৈরি করার পরিবর্তে rmআপনি এটিকে একটি local({ })ব্লকের ভিতরে রাখতে পারেন । ভাল উত্তর যদিও, আমি এক্স 11 কনফিগারেশন পছন্দ!
অ্যারন ম্যাকডেইড

হ্যাঁ, এই local({ ... })হিসাবে help(Startup)আমি যা দেখি সেগুলি হ'ল এই দিনগুলিতে সাধারণত Rprofile.site। কিছুক্ষণের জন্য এক্স 11 হ্যাকের দরকার নেই :)
ডার্ক এডেলবুয়েটেল

59
options(stringsAsFactors=FALSE)

যদিও আমার .R প্রোফাইলে আমার আসলে এটি নেই, কারণ এটি আমার সহাবরদের কোডটি ভেঙে দিতে পারে, আমি আশা করি এটি ডিফল্ট ছিল। কেন?

1) চরিত্রের ভেক্টরগুলি কম স্মৃতি ব্যবহার করে (তবে কেবল সবেমাত্র);

2) আরও গুরুত্বপূর্ণ, আমরা যেমন সমস্যাগুলি এড়াতে পারি:

> x <- factor(c("a","b","c"))
> x
[1] a b c
Levels: a b c
> x <- c(x, "d")
> x
[1] "1" "2" "3" "d"

এবং

> x <- factor(c("a","b","c"))
> x[1:2] <- c("c", "d")
Warning message:
In `[<-.factor`(`*tmp*`, 1:2, value = c("c", "d")) :
  invalid factor level, NAs generated

যখন আপনার প্রয়োজন হয় তখন উপাদানগুলি দুর্দান্ত (উদাহরণস্বরূপ গ্রাফগুলিতে ক্রম প্রয়োগ করা) তবে বেশিরভাগ সময় উপদ্রব হয়।


এডুয়ার্ডো - আকর্ষণীয়, কারণগুলি ব্যবহার না করে কী কী সুবিধা রয়েছে?
মেডিস্কল

28
+1 টি আমি এই আর এ ডিফল্ট ছিল
ইটারেটর

5
নোট করুন যে চরিত্রের ভেক্টরগুলি 32-বিট সিস্টেমে কেবল কম মেমরি (দুইশত বাইট বা তাই) ব্যবহার করবে বলে মনে হচ্ছে। 64৪-বিট সিস্টেমে ফ্যাক্টরগুলি যথেষ্ট কম ব্যবহার করে। stat.ethz.ch/pipermail/r-help/2012-
এরি বি ফ্রেডম্যান

+1 কারণগুলি সহ কয়েকটি বড় সমস্যা নির্দেশ করার জন্য ধন্যবাদ। এসএএস এর ফর্ম্যাট সিস্টেমটির অনেকগুলি সুবিধা রয়েছে, ইমো। পাঠ্য থেকে পড়ার সময়, স্ট্রিংসএফ্যাক্টরগুলি সর্বদা মিথ্যাতে সেট করা থাকে। তবে ডেটা স্থানান্তর করার জন্য, আমি যেখানেই সম্ভব স্প্রেডশিট থেকে পড়া এড়াতে চাই।
আদমো

58

আমি প্রতিবার 'মাথা', 'সারাংশ', 'নাম' পুরো শব্দটি টাইপ করতে ঘৃণা করি, তাই আমি উপকরণগুলি ব্যবহার করি।

আপনি আপনার .R প্রোফাইলে ফাইলের মধ্যে এলিয়াস রাখতে পারেন, তবে আপনাকে ফাংশনের পুরো পথটি ব্যবহার করতে হবে (যেমন ইউটিস :: হেড) অন্যথায় এটি কাজ করবে না।

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

সম্পাদনা করুন: আপনার প্রশ্নের উত্তর দিতে, আপনি টার্মিনালে বিভিন্ন বর্ণ থাকতে রঙিন প্যাকেজটি ব্যবহার করতে পারেন । শান্ত! :-)


8
আমি মনে করি nডিবাগ করার সময় আমাকে ব্যক্তিগতভাবে পোস্টারিয়রে কামড় দেবে।
রোমান Luštrik

2
ইন্টারেক্টিভ আর ব্যবহারের জন্য দুর্দান্ত, তবে এগুলি পোর্টেবল নয় - এগুলি আপনার (লিখিত) কোডে রাখবেন না!
ভিন্স

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। এটি এত দুর্দান্ত ধারণা ছিল না
টম

1
পুনরায় colorout: "" "এই প্যাকেজটি সংরক্ষণাগারভুক্ত করা হয়েছে: এটি CRAN নীতিগুলি দ্বারা অনুমোদিত নয় নন-এপিআই এন্ট্রি পয়েন্টগুলি ব্যবহার করেছে" ""
আইসোমর্ফিজমস

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

আমি আমার আর কমান্ডের ইতিহাস সংরক্ষণ এবং প্রতিবার চালানোর সময় এটি উপলব্ধ করা পছন্দ করি:

শেল বা .bashrc এ:

export R_HISTFILE=~/.Rhistory

ইন। প্রোফাইলে:

.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 মধ্যে পেয়ে।
ওয়াল্ডির লিওনসিও

1
আমি একটি আরস্টুডিও অ্যাডিন লিখেছি যাতে এই বৈশিষ্ট্যটি অন্তর্ভুক্ত রয়েছে। আপনি কেবল পথটি অনুলিপি করেছেন, আরস্টুডিও থেকে একটি মেনু ক্লিক করুন, এবং রূপান্তরিত পথটি আপনার কার্সারের অবস্থানে প্রবেশ করাবে। এটিতে কিছু কীস্ট্রোক সংরক্ষণ করা উচিত।
ড্র্যাকোডোক

1
আমি উইন্ডোজ পাথ ইস্যু SOO অনেকই ঘৃণা করি। আমি মনে করি আমার আরও ভাল সমাধান হতে পারে। আমি একটি স্নিপেট যোগ করেছি। তাই আমাকে যা করতে হবে তা হ'ল ডাব্লুপিইপি টাইপ করে ট্যাব টিপুন এবং আমার অনুলিপিযুক্ত পথটি দেখায়। কোডটি এখানে। snippet wpp `r paste("\"", gsub("\\\\", "/", readClipboard()), "\"", sep = "")`
jamesguy0121

18

আমি এটি পেয়েছি, সম্পূর্ণ টার্মিনাল প্রস্থ ব্যবহার করার জন্য আরও গতিশীল কৌশল, যা COLUMNS এনভায়রনমেন্ট ভেরিয়েবল (লিনাক্সে) থেকে পড়ার চেষ্টা করে:

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

আপনি আপনার টার্মিনাল উইন্ডোর আকার পরিবর্তন করার সাথে সাথে এইভাবে আর পুরো প্রস্থ ব্যবহার করবে।


1
কখন COLUMNSসেট না থাকে আপনি width = as.integer(system('tput cols',intern=TRUE)ব্যাকস্টপ হিসাবে চেষ্টা করতে পারেন ।
shabbychef

17

আমার বেশিরভাগ ব্যক্তিগত ফাংশন এবং লোডযুক্ত গ্রন্থাগারগুলি Rfunitions.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
হেই, আমি একটি আর জিইউআই "আরর" নামকরণের কথা ভেবেছিলাম - কিছু জলদস্যুতা যুক্ত করার এটি একটি খুব সহজ উপায় much
শার্পি

2
আহ, আপনাকে ধন্যবাদ। আর, গুলি চালানোর সময় আমি একমাত্র জলদস্যুদের কথা চিন্তা করি না এটা জেনে রাখা ভাল: :)
Ars

1
এটি ব্যাখ্যা করে যে @ ডির্ক কেন তাঁর স্ক্রিপ্টে তার হুক স্থাপন করছিলেন ...
জেমস

1
"অ্যাভাস্ট ইয়ে" অ-মানক পাইরেট । আমি আমার জলদস্যুকে মান অনুসারে পছন্দ করি। এছাড়াও, এর অর্থ tight "আঁটসাঁট চেপে ধরুন", সুতরাং এটি কি শুরুতে আরও বোঝায় না? : পি
nnot101

2
আসলে এটি শেষে নিখুঁত জ্ঞান তোলে। আর ডোমেনটি প্রস্থান করার জন্য আমরা এর চারপাশের কম পরিবেশে ফিরে আসি এবং আবার স্প্রেডশিট এবং অ্যাড-হক টেক্সট ফাইলগুলির সাথে ডিল করতে হবে।
কেপিয়ার্স 8

17

এখানে ম্যাক এবং লিনাক্সের জন্য ডিজাইন করা আমার ~ / .R প্রোফাইলেটি এসেছে

এগুলি ত্রুটিগুলি দেখতে সহজ করে তোলে।

options(showWarnCalls=T, showErrorCalls=T)

আমি সিআরএএন মেনু পছন্দটি ঘৃণা করি, তাই একটি ভাল সেট করুন।

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

আরও ইতিহাস!

Sys.setenv(R_HISTSIZE='100000')

টার্মিনাল থেকে ম্যাক ওএসএক্সে চলার জন্য নিম্নলিখিতটি রয়েছে (যা আমি আর.এপকে বেশি পছন্দ করি কারণ এটি আরও স্থিতিশীল, এবং আপনি ডিরেক্টরি দ্বারা আপনার কাজটি সংগঠিত করতে পারেন; এছাড়াও ভাল ~ / .inputrc পেতে নিশ্চিত হন )। ডিফল্টরূপে, আপনি একটি এক্স 11 ডিসপ্লে পাবেন যা দেখতে দুর্দান্ত দেখাচ্ছে না; এটি পরিবর্তে GUI এর মতো কোয়ার্টজ ডিসপ্লে দেয়। ifআপনি যখন ম্যাকের টার্মিনাল থেকে আর চালাচ্ছেন তখন এই বিবৃতিটি কেসটি ধরবে বলে মনে করা হচ্ছে।

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

যেখানে ইউজার.আর ফ্ল্যাক্সের নীচে আমি ব্যবহার করি এমন স্ট্যান্ডের একটি এলোমেলো ব্যাগ।

এছাড়াও, যেহেতু অন্যান্য ব্যক্তিরা কনসোল প্রস্থের কথা উল্লেখ করছিলেন, আমি এখানে এটি কীভাবে করব।

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তখন আছে তবে আমি এটি প্রয়োজনীয় হিসাবে উত্স করে রেখেছি।


আমি যদি একটি এক্সটার্ম উইন্ডোতে আর খুলি ("আর" টাইপ করে) এটি কি আর গুই-জাতীয় উইন্ডোটি খুলতে হবে? আমি এটি যোগ করে কোনও পার্থক্য বলতে পারি না .আমার হোম ডিরেক্টরিতে প্রোফাইলে।
রিচার্ড হেরন

না এটি যা করে তা হ'ল এটি কনসোলে সমস্ত কিছু রাখে। তবে, আপনি যখন জিনিসগুলি প্লট করেন, এটি ডিফল্ট এক্স 11 ডিসপ্লে ডিভাইসের চেয়ে স্মার্ট ডিসপ্লে ডিভাইস ব্যবহার করে।
ব্রেন্ডন ওকননর

আমি মনে করি এই উইন্ডো-আকার পরিবর্তনকারী স্ক্রিপ্টগুলি কার্যকরভাবে প্যাকেজ হতে পারে। তুমি কি একমত?
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
আপনার প্রতিষ্ঠানের প্রক্সি ঠিকানাটি আপনাকে কোনও পাবলিক ওয়েবসাইটে পোস্ট করা উচিত নয়।
ডালোলিওগম

13
dalloliogm, এটি একটি ব্যক্তিগত (অ পাবলিক) আইপি ঠিকানা। এই ঠিক একই আইপি ঠিকানার সাথে বিশ্বজুড়ে কয়েক হাজার কম্পিউটার রয়েছে। সৌভাগ্য আমার কোনটি তা জানার চেষ্টা করছে!
আলফ্রেড জে ফাজিও

2
আলফ্রেড, আপনি কি আরএস () ব্যবহার না করে প্রারম্ভিক 'নামকরণ বাদ দিয়ে, প্রফাইলে (যেমন আপনি এখানে আছেন) ফাংশনগুলি সংজ্ঞায়নের কোনও উপায় খুঁজে পেয়েছেন? আমি যখন লস () করি তখন আমি যে ফাংশনগুলি সংজ্ঞায়িত করেছিলাম সেগুলি থেকে আমার কাছে প্রচুর গোলমাল থাকে। ধন্যবাদ
কিথ

4
@ কীথ তাদের একটি পরিবেশে নির্ধারণ করুন এবং পরিবেশটিকে অনুসন্ধানের পথে সংযুক্ত করুন, তারপরে পরিষ্কার করুন। যদি ফাংশনগুলি একটি পৃথক ফাইলে থাকে তবে আপনি সরাসরি পরিবেশে উত্স তৈরি করতে পারেন। দেখুন ?new.env, ?assignএবং ?sys.source। আপনি যদি এটি কাজ করতে না পারেন তবে এসও-তে একটি নতুন প্রশ্ন পোস্ট করুন এবং আমি নিশ্চিত যে আপনি উত্তরগুলি পেয়ে যাবেন।
গ্যাভিন সিম্পসন

আপনার প্যাকেজটি 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

ডেটা.ফ্রেমগুলি কিছুটা 'মাথা' এর মতো প্রদর্শন করুন, কেবল 'মাথা' টাইপ না করেই করুন

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

আমার প্রায়শই আমার কল করা দরকার এমন ডিবাগ কলগুলির চেইন থাকে এবং এগুলি খুব ক্লান্তিকর হতে পারে om এসও সম্প্রদায়ের সহায়তায় , আমি নিম্নলিখিত সমাধানের জন্য গিয়েছিলাম এবং এটি আমার মধ্যে .োকালাম .Rprofile.site# BROWSERআমার Eclipse Tasks এর জন্য যাতে আমার কাছে টাস্ক ভিউ উইন্ডোতে ব্রাউজার কলগুলির ওভারভিউ থাকে।

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

আমি মাইএসকিএল ডাটাবেসগুলি থেকে অনেক কাজ করি, তাই এখনই সংযোগ স্থাপন করা গডসেন্ড। আমি কেবল ইচ্ছুক আভিয়েবল ডেটাবেসগুলির তালিকা করার কোনও উপায় ছিল যাতে আমার সমস্ত আলাদা নাম মনে রাখার দরকার হয় না।


4
বোকা আমাকে dbGetQuery (কন, "ডাটাবেসগুলি দেখান;")
ব্র্যান্ডন বার্টেলসেন

8

স্টিফেন টার্নারের পোস্ট .আর প্রোফাইলগুলিতে বেশ কয়েকটি দরকারী উপাধি এবং স্টার্টার ফাংশন রয়েছে।

আমি নিজেকে প্রায়ই তার এইচটি এবং এইচএইচ ব্যবহার করে দেখতে পাই।

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

বারস্টমিস্ক নামে একটি প্যাকেজ রয়েছে যার মধ্যে একটি ফাংশন রয়েছে cornerযা আপনার hhফাংশনটির মতো করে এবং আরও কিছু করে। ;)
ওয়াল্ডির লিওনসিও

7

এখানে উল্লেখ করা কয়েকটি ধারণা সহ আমার।

দুটি বিষয় যা আপনি দেখতে চাইতে পারেন:

  • .set.width () / w () আপনার মুদ্রণের প্রস্থটি টার্মিনালের একটিতে আপডেট করুন। দুর্ভাগ্যক্রমে আমি টার্মিনাল রিসাইজে স্বয়ংক্রিয়ভাবে এটি করার কোনও উপায় খুঁজে পেলাম না - আর ডকুমেন্টেশন উল্লেখ করেছে যে এটি কিছু আর ইন্টারপ্রেটার দ্বারা সম্পন্ন হয়েছে।
  • ইতিহাস প্রতিবার একটি টাইমস্ট্যাম্প এবং কার্যকারী ডিরেক্টরি সহ একত্রিত হয়

.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

আরস্টুডিওতে "পিডিএফ সংকলন করুন" বোতামটি নিয়ে কাজ করার জন্য আমি নিম্নলিখিতটি ক্যাশেউইভ (বা pgfSweave) পেতে ব্যবহার করি:

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


7

এই আমার। খুব উদ্ভাবনী কিছুই। কেন নির্দিষ্ট পছন্দ:

  • আমি একটি ডিফল্ট সেট করতে গিয়েছিলাম stringsAsFactorsকারণ আমি যখন প্রতিবারই কোনও সিএসভি পড়ি তখন এটি একটি তর্ক হিসাবে তীব্রভাবে উত্তীর্ণ করে ফেলতে দেখি That তিনি বলেছিলেন, কম্পিউটারে আমার সাধারণ কম্পিউটারে লিখিত কোড ব্যবহার করার সময় এটি ইতিমধ্যে আমাকে কিছুটা ক্ষুদ্র বিরক্তির কারণ করেছে which আমার .আর প্রোফাইল নেই। আমি এটি রাখছি, যদিও, এটি যে সমস্যাগুলির কারণে প্রতিদিন ব্যবহার হয় না সেটাকে তুলনামূলকভাবে ফ্যাকাশে হয়ে থাকে।
  • আপনি যদি utilsপ্যাকেজটি আগে লোড না করেন তবে options(error=recover)কোনও interactive()ব্লকের ভিতরে রাখলে এটি পুনরুদ্ধার করতে পারে না ।
  • আমি .dbআমার ড্রপবাক্স সেটিংয়ের পরিবর্তে options(dropbox=...)ব্যবহার করেছি কারণ আমি এটি সমস্ত সময় ভিতরে ব্যবহার করি file.pathএবং এটি অনেক বেশি টাইপ করে সংরক্ষণ করে sa নেতৃস্থানীয় .এটি উপস্থিত হতে বাধা দেয় 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

লটেক্সে সারণি রফতানি করার জন্য এখানে একটি ছোট স্নিপেট । আমি লেখার অনেক প্রতিবেদনের জন্য এটি সমস্ত কলামের নামকে গণিতের মোডে পরিবর্তন করে। আমার .আর প্রোফাইলে বাকীটি বেশ মানক এবং বেশিরভাগ উপরে aboveাকা থাকে।

# 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")
মেরেক

5

আমার কাছে পরিবেশগত পরিবর্তনশীল R_USER_WORKSPACE রয়েছে যা আমার প্যাকেজগুলির শীর্ষ ডিরেক্টরিতে নির্দেশ করে। .আর প্রোফাইলে আমি একটি ফাংশন ডিভলিব সংজ্ঞায়িত করি যা কার্যকরী ডিরেক্টরি সেট করে (যাতে ডেটা () কাজ করে) এবং আর সাব ডিরেক্টরিতে সমস্ত .R ফাইল উত্স করে। এটি উপরের হ্যাডলির l () ফাংশনের সাথে বেশ মিল।

devlib <- function(pkg) {
  setwd(file.path(Sys.getenv("R_USER_WORKSPACE", "."), deparse(substitute(pkg)), "dev"))
  sapply(list.files("R", pattern=".r$", ignore.case=TRUE, full.names=TRUE), source)
  invisible(NULL)
}

.First <- function() {
  setwd(Sys.getenv("R_USER_WORKSPACE", "."))
  options("repos" = c(CRAN = "http://mirrors.softliste.de/cran/", CRANextra="http://www.stats.ox.ac.uk/pub/RWin"))
}

.Last <- function() update.packages(ask="graphics")

5

আমি দুটি প্রয়োজনীয় ফাংশন দেখতে পেয়েছি: প্রথমত যখন আমি debug()বেশ কয়েকটি ফাংশন শুরু করি এবং আমি বাগটি সমাধান করেছি, তাই আমি undebug()সমস্ত ফাংশনগুলিতে চাই - এক এক করে নয়। undebug_all()ফাংশন গৃহীত উত্তর হিসেবে নিজেকে যুক্ত এখানে সবচেয়ে ভাল।

দ্বিতীয়ত, যখন আমি অনেকগুলি কার্যকারিতা সংজ্ঞায়িত করেছি এবং আমি একটি নির্দিষ্ট পরিবর্তনশীল নামটি খুঁজছি ls(), তখন ফাংশনের নামগুলি সহ সমস্ত ফলাফলের মধ্যে এটি খুঁজে পাওয়া শক্ত । lsnofun()ফাংশন পোস্ট এখানে সত্যিই ভাল।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.