কমান্ড লাইনে (টার্মিনাল) আর স্ক্রিপ্টগুলি ব্যবহার করার সর্বোত্তম উপায় কী?


115

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

#!/path/to/R
...

অথবা

#!/usr/bin/env R
...

তবে আমি সেগুলির কোনওটিই করতে পারিনি।

আর একটি বিকল্প হ'ল স্ক্রিপ্টগুলি নিখুঁতভাবে আরে রাখা script.R, এবং যেমন R --file=script.Rবা এর সাথে অনুরোধ করা । তবে, মাঝে মাঝে স্ক্রিপ্টটি অস্পষ্ট কমান্ড লাইন সুইচগুলির উপর নির্ভর করবে যা কোডের কোন অংশে স্ক্রিপ্টের বাইরে উপস্থিত রয়েছে। উদাহরণ: একটি স্থানীয় .Rprofile মাধ্যমে ব্যাশ থেকে আর মধ্যে জিনিষ গোপন, আকাঙ্ক্ষিত সুইচ তারপর সবকিছু হয় --vanillaব্যতীত বোঝা --no-init-file

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

আমি বর্তমানে যে বিকল্পটি ঘৃণা করি তা হ'ল বাশ স্ক্রিপ্টে আর এম্বেড করছে:

#!/bin/bash
... # usage message to catch bad input without invoking R
... # any bash pre-processing of input
... # etc
R --random-flags <<RSCRIPT
# R code goes here
RSCRIPT

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

আমি অনুপস্থিত আর কোন উপায় আছে?

উত্তর:


132

এর বিষয়বস্তু script.r:

#!/usr/bin/env Rscript

args = commandArgs(trailingOnly = TRUE)
message(sprintf("Hello %s", args[1L]))

প্রথম লাইনটি শেবাং লাইন/usr/bin/env Rscriptআপনার আর ইনস্টলেশনের পথে কঠোর কোডিংয়ের পরিবর্তে ব্যবহার করা ভাল অনুশীলন । অন্যথায় আপনি অন্য কম্পিউটারে আপনার স্ক্রিপ্ট ভাঙার ঝুঁকি নিয়ে থাকেন।

এরপরে, এটি সম্পাদনযোগ্য করুন (কমান্ড লাইনে):

chmod +x script.r

কমান্ড লাইন থেকে প্রার্থনা:

./script.r world
# Hello world

1
হ্যাঁ, আমি মনে করি এটি এটি করার "অফিসিয়াল" উপায়।
ফ্রাঙ্ক

5
এবং Rscript --helpকমান্ড লাইন থেকে চালানো প্রচুর দরকারী বিকল্পগুলির তালিকা তৈরি করবে যা শেবাংয়ে যুক্ত করতে পারে, যেমন --vanilla
ফ্লোডেল

8
আসুন কমান্ড লাইনটি পার্স করার জন্য commandArgsফাংশন getoptএবং optparseপ্যাকেজগুলিও উল্লেখ করি । যাতে কমান্ড লাইন থেকে চলাকালীন আপনার স্ক্রিপ্টগুলিতে যুক্তি এবং বিকল্পগুলিও সরবরাহ করা যায়।
ফ্লোডেল

1
লক্ষ্য করুন যে এটি কেবল তখনই কার্যকর হয় #!/usr/bin/Rscript(যা আর স্ক্রিপ্টগুলির জন্য মান অনুশীলন নয় )।
23:53

16

ছোট্ট চেষ্টা করুন । littlerজিএনইউ আর এর জন্য হ্যাশ-ব্যাং (যেমন স্ক্রিপ্ট #! / কিছু / পথ দিয়ে শুরু) এর পাশাপাশি সহজ কমান্ড-লাইন এবং পাইপিং ব্যবহার সরবরাহ করে।


10

মিগুয়েল সানচেজের প্রতিক্রিয়াটি হওয়া উচিত। অন্য উপায়ে রুপি স্ক্রিপ্টটি কার্যকর করা সিস্টেমের প্রশস্ত আরএসক্রিপ্ট চালানোর জন্য 'env' কমান্ড হতে পারে।

#!/usr/bin/env Rscript

1
"সিস্টেম-ওয়াইড" নয়, বরং envআপনাকে Rscriptনিজের মধ্যে পাওয়া প্রথমটি চালানোর অনুমতি দেবে $PATH, সুতরাং এটির সাহায্যে সিস্টেম-ওয়াইড / ডিফল্ট (যা ইনস্টল নাও করা যেতে পারে ) ব্যতীত অন্য কিছু চালাতে Rscriptপারে /usr/whatever। আমি বিশেষত স্ট্যান্ডার্ড জায়গায় ইনস্টল না করা হতে পারে, কারণ envজন্য Rএবং Rscriptস্টাফ ব্যবহার করার পরামর্শ দেব । (সাধারণ bashস্ক্রিপ্টগুলি তবে সাধারণত নিরাপদে সর্বদা ব্যবহার করা যায় #!/bin/bash))
মাইকেল

@ মাইকেল না, আপনি বাশ সম্পর্কে ভুল করছেন এবং এটি বিপজ্জনক পরামর্শ। নিরাপদে হার্ড কোডিং করা যায় এমন একমাত্র জিনিস /bin/sh। অন্য সব কিছু অবশ্যই লুক্কুট ব্যবহার করা উচিত env। বিশেষত, প্রায়শই না কম গণনা ক্লাস্টারগুলিতে বাশ পুরানো হয় এবং ব্যবহারকারীদের নিজস্ব কাস্টম ইনস্টলেশন থাকে (সাধারণত এনএফএস মাউন্টের ~/.local/binমতো কিছুতে ভাগ করা হয় বা ভাগ করা হয় /software)। অনুরূপভাবে, MacOS উপর, /bin/bashহয় সবসময় কারণে সমস্যা লাইসেন্সিং জন্য পুরানো, এবং একটি আপ টু ডেট ব্যাশ আরো সাধারণভাবে এ অবস্থিত করতে /usr/local/bin/bash(আমি বুঝতে পারছি আপনার মন্তব্যের 3 বছর বয়সী কিন্তু এই মোটামুটি গুরুত্বপূর্ণ।)
কনরাড রুডলফ

না, দুঃখিত, এটি সত্য নয়। বিষয়টি সম্পর্কে আপনার দৃ on় মতামত রয়েছে, তবে আমি এই বিষয়ে বিতর্ক করব না। যদি ব্যবহার করা /bin/shহয়, কোনও পরিস্থিতিতে "বিপজ্জনক" নাও হয়, তবে আপনাকে একই কথাটি স্বীকার করতে হবে /bin/bash। বিভিন্ন ব্যবহারকারীর জন্য envনির্ভরযোগ্য / অসঙ্গত PATHসেটিংসের কারণে ব্যবহার করা আরও অনাকাঙ্ক্ষিত, তবে প্রতিটি আর ব্যবহারকারী প্রকৃতপক্ষে এই আচরণটি পেতে পারে, যেখানে bashস্ক্রিপ্টগুলি না করে। শেষ অবধি, সিআই / ক্লাউডের জন্য নতুন বাশ স্ক্রিপ্টগুলি চাওয়ার জন্য কেবল তাদের ব্যবহার করে /path/to/my/bash myscriptবা স্পষ্টভাবে পথ নির্ধারণ করুন এবং তাদের ব্যবহারের জন্য অনুরোধ করুন env script। EOT
মাইকেল

9

#!/path/to/Rকাজ করবে না কারণ আর নিজেই একটি স্ক্রিপ্ট, তাই execveঅসন্তুষ্ট।

আমি ব্যবহার করি R --slave -f script


4
ক্যাজুয়াল পাঠকদের কাছে ফাই: আপনি ভাবছেন এমন ক্ষেত্রে অনেকগুলি এর পূর্ব-তারিখ Rscript(এবং littler) উত্তর ।
মাইকেল

@ মাইকেল এখানে উত্তরগুলির কোনওোটাই রুপলিপিটির পূর্বাভাস দেয় না, যা 2007 সালে আর 2.5.0 এর সাথে প্রকাশ হয়েছিল।
কনরাড রুডল্ফ


4

এইটা কাজ করে,

#!/usr/bin/Rscript

তবে আপনার মেশিনে 1 টির বেশি সংস্করণ ইনস্টল করা থাকলে কী হয় তা আমি জানি না।

আপনি যদি এটি এটি করেন

#!/usr/bin/env Rscript

এটি অনুবাদককে কেবল আপনার পথে প্রথমে যেটি আর প্রদর্শিত হবে তা ব্যবহার করতে বলে।


2

আপনার স্ক্রিপ্টটি কার্যকর করতে আপনি যে প্রোগ্রামটি ব্যবহার করছেন তা যদি পরামিতিগুলির প্রয়োজন হয় তবে আপনি এটিকে # এর শেষে রাখতে পারেন! লাইন:

#!/usr/bin/R --random --switches --f

আর না জানা, আমি সঠিকভাবে পরীক্ষা করতে পারছি না, তবে এটি কাজ করে বলে মনে হচ্ছে:

axa@artemis:~$ cat r.test
#!/usr/bin/R -q -f
error
axa@artemis:~$ ./r.test
> #!/usr/bin/R -q -f
> error
Error: object "error" not found
Execution halted
axa@artemis:~$

2

এই পোস্টে যুক্ত করার জন্য কেবল একটি নোট। পরবর্তী সংস্করণগুলি কিছুটা Rকবর দিয়েছে বলে মনে হয় Rscript। OSX এ 3.1.2-1 আর এর জন্য জানুয়ারী 2015 ডাউনলোড হয়েছে Rscriptin

/sw/Library/Frameworks/R.framework/Versions/3.1/Resources/bin/Rscript

সুতরাং, এর মতো কিছু পরিবর্তে #! /sw/bin/Rscript, আমাকে আমার স্ক্রিপ্টের শীর্ষে নিম্নলিখিতটি ব্যবহার করা দরকার।

#! /sw/Library/Frameworks/R.framework/Versions/3.1/Resources/bin/Rscript

locate Rscriptআপনাকে সহায়ক হতে পারে।


এই উত্তরটি সম্ভাব্য সহায়ক, কারণ এটি স্পষ্ট নয় যে ওপি কোন প্ল্যাটফর্মটি (* নিক্স বা ম্যাক ওএস) উল্লেখ করে। সামান্য পুনরায় কাজ করার সাথে (কোডটি ফর্ম্যাট করতে এবং অ্যাপোলোজেটিক শুরুটি সরিয়ে ফেলার জন্য দেখুন), এটি এখানে উত্তরের একটি ভাল সংযোজন হবে।
বেনবার্নস

2
স্ক্রিপ্টগুলিতে #!/usr/bin/env Rscriptহার্ড-কোডেড পাথের পরিবর্তে R(এবং সেই দীর্ঘ পথটি আপনার যুক্ত করুন $PATH) ব্যবহার করার জন্য এটি আর একটি কারণ
মাইকেল

0

আপনি পাইথনের আরপিআই 2 মডিউলটি ব্যবহার করতে চাইতে পারেন। তবে এটি করার জন্য "সঠিক" উপায়টি হ'ল সিএমডি ব্যাচের সাথে AT আপনি STDOUT এ লেখার জন্য এটি পরিবর্তন করতে পারেন, তবে ডিফল্টটি একটি .আরউট ফাইলটিতে লিখতে হয়। নীচে উদাহরণ দেখুন:

[ramanujan:~]$cat foo.R
print(rnorm(10))
[ramanujan:~]$R CMD BATCH foo.R
[ramanujan:~]$cat foo.Rout

R version 2.7.2 (2008-08-25)
Copyright (C) 2008 The R Foundation for Statistical Computing
ISBN 3-900051-07-0

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

[Previously saved workspace restored]


 ~/.Rprofile loaded.
Welcome at  Fri Apr 17 13:33:17 2009
> print(rnorm(10))
 [1]  1.5891276  1.1219071 -0.6110963  0.1579430 -0.3104579  1.0072677 -0.1303165  0.6998849  1.9918643 -1.2390156
>

Goodbye at  Fri Apr 17 13:33:17 2009
> proc.time()
   user  system elapsed
  0.614   0.050   0.721

দ্রষ্টব্য: আপনি সমস্ত স্টার্টআপ ক্রাফট অপসারণ করার জন্য --vanilla এবং অন্যান্য বিকল্পগুলি চেষ্টা করে দেখতে চাইবেন।


0

কমান্ড লাইনে দ্রুত আর স্ক্রিপ্টগুলি লেখার জন্য ছোট চেষ্টা করুন:

http://code.google.com/p/simple-r/

( rডিরেক্টরিতে কমান্ড)

কমান্ড লাইন থেকে ছোটআর ব্যবহার করে প্লট করা এইরকম দেখতে পাবেন:

r -p file.txt

2
এর পরিবর্তে (যা মৃত মনে হয়) littlerঅবশ্যই পছন্দ করা হবে (যেহেতু এটি এখনও জীবিত); বা, কেবল ব্যবহার করুন Rscript(যা আসলে littlerতৈরি হওয়ার পরে বেরিয়ে এসেছিল ))
মাইকেল

-1

নিম্নলিখিতটি উইন্ডোজে এমএসওয়াইএস ব্যাশ ব্যবহার করে আমার জন্য কাজ করে - আমার লিনাক্স বাক্সে আমার আর নেই তাই এটি চেষ্টা করে দেখতে পারেন না। আপনার দুটি ফাইল দরকার - প্রথমে রানার নামে একটি ফাইল প্যারামিটার দিয়ে আর চালায়

# this is runr
# following is path to R on my Windows machine
# plus any R params you need
c:/r/bin/r --file=$1

আপনাকে chmod + x রানার দিয়ে এটি কার্যকর করতে হবে

তারপরে আপনার স্ক্রিপ্ট ফাইলটিতে:

#!runr
# some R commands
x = 1
x

নোট করুন #! আপনি কীভাবে কমান্ডটি ব্যবহার করছেন, কীভাবে আপনার PATH ভেরিয়েবল সেট করা আছে ইত্যাদি উপর নির্ভর করে রুনার লাইনের জন্য রানারের পুরো পথ অন্তর্ভুক্ত করা দরকার may

সুন্দর নয়, তবে মনে হচ্ছে এটি কাজ করে!


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