summaryrefslogtreecommitdiff
path: root/lib/r-util.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/r-util.rb')
-rw-r--r--lib/r-util.rb82
1 files changed, 82 insertions, 0 deletions
diff --git a/lib/r-util.rb b/lib/r-util.rb
new file mode 100644
index 0000000..0d58389
--- /dev/null
+++ b/lib/r-util.rb
@@ -0,0 +1,82 @@
+# pending: package dir hack ---------
+# CONFIG[:base_dir] = "/home/<user>/opentox-ruby/www"
+# PACKAGE_DIR = "/home/<user>/opentox-ruby/r-packages"
+package_dir = CONFIG[:base_dir].split("/")
+package_dir[-1] = "r-packages"
+package_dir = package_dir.join("/")
+PACKAGE_DIR = package_dir
+
+
+
+module Lib
+
+ module RUtil
+
+ def self.dataset_to_dataframe( dataset )
+ LOGGER.debug "convert dataset to dataframe #{dataset.uri}"
+ all_features = []
+ dataset.features.each do |f|
+ feat_name = "feature_#{f[0].split("/")[-1]}"
+ LOGGER.debug "- adding feature: #{feat_name}"
+ feat = OpenTox::Feature.find(f[0])
+ nominal = feat.metadata[RDF.type].to_a.flatten.include?(OT.NominalFeature)
+ values = []
+ dataset.compounds.each do |c|
+ val = dataset.data_entries[c][f[0]]
+ raise "not yet implemented" if val!=nil && val.size>1
+ v = val==nil ? "" : val[0].to_s
+ v = "NA" if v.size()==0
+ values << v
+ end
+ all_features << feat_name
+ @@r.assign feat_name,values
+ @@r.eval "#{feat_name} <- as.numeric(#{feat_name})" unless nominal
+ end
+ df_name = "df_#{dataset.uri.split("/")[-1].split("?")[0]}"
+ cmd = "#{df_name} <- data.frame(#{all_features.join(",")})"
+ @@r.eval cmd
+ #@@r.eval "head(#{df_name})"
+ df_name
+ end
+
+ def self.stratified_split( dataframe, pct=0.3, seed=42 )
+ @@r.eval "set.seed(#{seed})"
+ @@r.eval "split <- stratified_split(#{dataframe}, ratio=#{pct})"
+ split = @@r.pull 'split'
+ split.collect{|s| s.to_i}
+ end
+
+ def self.package_installed?( package )
+ @@r.eval ".libPaths(\"#{PACKAGE_DIR}\")"
+ p = @@r.pull "installed.packages()[,1]"
+ p.include?(package)
+ end
+
+ def self.install_packages( package )
+ unless package_installed? package
+ @@r.eval "install.packages(\"#{package}\", repos=\"http://cran.r-project.org\", dependencies=T, lib=\"#{PACKAGE_DIR}\")"
+ end
+ end
+
+ def self.library( package )
+ install_packages( package )
+ @@r.eval "library(\"#{package}\")"
+ end
+
+ def self.init_r
+ @@r = RinRuby.new(true,false) unless defined?(@@r) and @@r
+ library("sampling")
+ library("gam")
+ @@r.eval "source(\"#{PACKAGE_DIR}/stratification.R\")"
+ end
+
+ def self.quit_r
+ begin
+ @@r.quit
+ @@r = nil
+ rescue
+ end
+ end
+
+ end
+end