lib/rbbt/util/R.rb in rbbt-util-5.21.116 vs lib/rbbt/util/R.rb in rbbt-util-5.21.118
- old
+ new
@@ -53,25 +53,42 @@
else
CMD.cmd('R --no-save --slave --quiet', options.merge(:in => cmd))
end
end
- def self.interactive(script, options = {})
- TmpFile.with_file do |init_file|
- Open.write(init_file) do |f|
- f.puts "# Loading basic rbbt environment"
- f.puts "library(utils, quietly=TRUE);\n"
- f.puts "interactive.script.file = '#{init_file}'"
+ def self.interactive(script, source = [], options = {})
+ TmpFile.with_file(script) do |script_file|
+ TmpFile.with_file do |init_file|
- f.puts "source('#{R::UTIL}');\n"
- f.puts "rbbt.require('readr')"
- f.puts "interactive.script = read_file(interactive.script.file)"
- f.puts "cat(interactive.script)"
- f.puts ""
- f.puts script
- end
+ cmd = <<-EOF
+ # Loading basic rbbt environment"
+library(utils, quietly=TRUE);
+library(grDevices,quietly=TRUE)
+source('#{R::UTIL}');
+EOF
+
+ require_sources = source.collect{|source|
+ source = R::LIB_DIR["#{source.to_s}.R"] if R::LIB_DIR["#{source.to_s}.R"].exists?
+ "source('#{source}')"
+ } * ";\n" if Array === source and source.any?
+
+ cmd << require_sources + "\n\n" if require_sources
+
+ cmd += <<-EOF
+
+rbbt.require('readr')
+interactive.script.file = '#{script_file}'
+interactive.script = read_file(interactive.script.file)
+
+cat(interactive.script)
+
+source(interactive.script.file)
+ EOF
+
+ Open.write init_file, cmd
CMD.cmd("env R_PROFILE='#{init_file}' xterm \"$R_HOME/bin/R\"")
+ end
end
end
def self.console(script, options = {})
TmpFile.with_file do |init_file|
@@ -191,11 +208,10 @@
## Resaving data
if (! is.null(data)){ rbbt.tsv.write('#{f}', data); }
NULL
EOF
-
case r_options.delete :method
when :eval
R.eval_run script
else
R.run script, r_options
@@ -211,19 +227,25 @@
tsv
end
end
end
- def R_interactive(pre_script = nil, source = true)
- TmpFile.with_file do |f|
- Log.debug{"R Interactive:\n" << pre_script } if pre_script
- TmpFile.with_file(pre_script) do |script_file|
- Open.write(f, self.to_s)
- script = "data_file = '#{f}';\n"
- script << "script_file = '#{script_file}';\n" if pre_script
- script << "source(script_file);\n" if source
- R.interactive(script)
- end
+ def R_interactive(script = nil, source = [])
+ TmpFile.with_file do |data_file|
+ Open.write(data_file, self.to_s)
+
+ Log.debug{"R Interactive:\n" << script } if script
+
+ script =<<-EOF
+# Loading data
+data_file = '#{data_file}'
+data = rbbt.tsv(data_file)
+
+# Script
+#{script}
+ EOF
+
+ R.interactive(script)
end
end
def R_console(pre_script = nil)
TmpFile.with_file do |f|