blob: 0d583897a46857e0783f5a1cfc5a1d68890658b3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
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
|