Method: OpenTox::RUtil#feature_value_plot

Defined in:
lib/r-util.rb

#feature_value_plot(files, dataset_uri1, dataset_uri2, dataset_name1, dataset_name2, features = nil, subjectid = nil, waiting_task = nil) ⇒ Object

embedds feature values of two datasets into 2D and plots it



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# File 'lib/r-util.rb', line 91

def feature_value_plot(files, dataset_uri1, dataset_uri2, dataset_name1, dataset_name2,
    features=nil, subjectid=nil, waiting_task=nil)
    
  LOGGER.debug("r-util> create feature value plot")
  d1 = OpenTox::Dataset.find(dataset_uri1,subjectid)
  d2 = OpenTox::Dataset.find(dataset_uri2,subjectid)
  if features
    [d1, d2].each{|d| features.each{|f| raise "feature not included" unless d.features.keys.include?(f)}} 
  else
    raise "different\n#{d1.features.keys.sort.to_yaml}\n#{d2.features.keys.sort.to_yaml}" if 
      (d1.features.keys.sort != d2.features.keys.sort)
    features = d1.features.keys
  end
  raise "at least two features needed" if d1.features.keys.size<2
  waiting_task.progress(25) if waiting_task
  
  df1 = dataset_to_dataframe(d1,0,subjectid,features)
  df2 = dataset_to_dataframe(d2,0,subjectid,features)
  waiting_task.progress(50) if waiting_task
  
  @r.eval "df <- rbind(#{df1},#{df2})"
  @r.eval "split <- c(rep(0,nrow(#{df1})),rep(1,nrow(#{df2})))"
  @r.names = [dataset_name1, dataset_name2]
  LOGGER.debug("r-util> - convert data to 2d")
  #@r.eval "save.image(\"/tmp/image.R\")"
  @r.eval "df.2d <- plot_pre_process(df, method='sammon')"
  waiting_task.progress(75) if waiting_task
  
  LOGGER.debug("r-util> - plot data")
  plot_to_files(files) do |file|
    @r.eval "plot_split( df.2d, split, names, main='Sammon embedding of #{features.size} features',xlab='x',ylab='y')"
  end
end