Module: Rserve

Defined in:
lib/R4rb/Rserve.rb

Overview

IMPORTANT, no use of R4rb tools! R2rb or Rserve mode only!

Defined Under Namespace

Classes: RVector

Class Method Summary collapse

Class Method Details

.<(code) ⇒ Object



145
146
147
# File 'lib/R4rb/Rserve.rb', line 145

def Rserve.<(code)
  Rserve.output(code)
end

.<<(code) ⇒ Object



131
132
133
# File 'lib/R4rb/Rserve.rb', line 131

def Rserve.<<(code)
  Rserve.eval(code)
end

.assign(code, var = nil, cli = nil) ⇒ Object



149
150
151
152
153
154
155
156
# File 'lib/R4rb/Rserve.rb', line 149

def Rserve.assign(code,var=nil,cli=nil)
  code+=",quote(#{var})" if var
  cli=Rserve.cli unless cli
  code="RSassign(#{cli},#{code})"
  #p code
  #R2rb << code ###????
  Rserve << code
end

.cliObject

the two following methods to be possibly redefined in particular inside Dyndoc to automatically allocate the R session related to the user!



48
49
50
# File 'lib/R4rb/Rserve.rb', line 48

def Rserve.cli
  @@cli
end

.cli=(cli) ⇒ Object



52
53
54
# File 'lib/R4rb/Rserve.rb', line 52

def Rserve.cli=(cli)
  @@cli=cli
end

.client(cli = nil) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/R4rb/Rserve.rb', line 58

def Rserve.client(cli=nil)
  ## automate the init process!
  #Rserve.init unless @@clients

  ##return current client!
  unless cli   
    return Rserve.cli
  ## create a new client
  else     
    Rserve.open(cli)
  end
end

.client=(cli = nil) ⇒ Object

change the current client!



72
73
74
75
# File 'lib/R4rb/Rserve.rb', line 72

def Rserve.client=(cli=nil)
  return nil unless @@clients.include? cli
  Rserve.cli=cli
end

.close(cli = nil) ⇒ Object



83
84
85
86
87
88
# File 'lib/R4rb/Rserve.rb', line 83

def Rserve.close(cli=nil) 
  cli=Rserve.cli unless cli
  return unless @@clients.include? cli
  "RSclose(#{cli.to_s})".R2rb
  @@clients.delete(cli)
end

.complete_code!(code) ⇒ Object

interface



96
97
98
99
100
# File 'lib/R4rb/Rserve.rb', line 96

def Rserve.complete_code!(code)
  code.gsub!("\\","\\\\")
  code.gsub!("\"","\\\"")
  code.replace("RSeval(#{cli},\"capture.output({"+code+"})\")")
end

.completed_code(code, capture = true) ⇒ Object



103
104
105
106
# File 'lib/R4rb/Rserve.rb', line 103

def Rserve.completed_code(code,capture=true)
  open,close= (capture ? ["capture.output({","})"] : ["",""])
  "RSeval(#{cli},\""+open+code.gsub("\\","\\\\").gsub("\"","\\\"")+close+"\")"
end

.eval(code, cli = nil) ⇒ Object



108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/R4rb/Rserve.rb', line 108

def Rserve.eval(code,cli=nil)
  cli=Rserve.cli unless cli
  return nil unless cli
  ## check parsing locally (without RSeval)
  status=R2rb.parse code
  if status!=1
    R2rb.parse code,true
    return false
  end
  ## RSeval completed in code!
  Rserve.complete_code!(code)
  #puts "Rserve.eval:";p code
  R2rb.eval code
  #@@out < code ##@@out.inR2rb code # since @@out < code but for R2rb
end

.initObject



32
33
34
35
36
37
38
39
40
41
42
# File 'lib/R4rb/Rserve.rb', line 32

def Rserve.init
  #puts "Rserve.init"
  Array.initR
  #puts "Rserve.init2"
  "require(Rserve)".R2rb
  #puts "Rserve.init3"
  @@clients,@@cli=[],nil
  @@out=[]
  @@out.rb2R=R2rb
  #puts "Rserve.init4"
end

.lsObject



90
91
92
# File 'lib/R4rb/Rserve.rb', line 90

def Rserve.ls
  @@clients
end

.open(cli) ⇒ Object



77
78
79
80
81
# File 'lib/R4rb/Rserve.rb', line 77

def Rserve.open(cli)
  "#{cli.to_s} <- RSconnect()".R2rb
  @@clients << cli
  Rserve.cli=cli
end

.output(code, cli = nil) ⇒ Object



135
136
137
138
139
140
141
142
143
# File 'lib/R4rb/Rserve.rb', line 135

def Rserve.output(code,cli=nil)
  #puts "Rserve.output:";p code
  cli=Rserve.cli unless cli
  return nil unless cli
  ## RSeval completed in code!
  Rserve.complete_code!(code)
  @@out < code ##@@out.inR2rb rcode.to_s
    return (@@out.length<=1 ? @@out[0] : @@out)
end

.pidObject

server side



7
8
9
# File 'lib/R4rb/Rserve.rb', line 7

def Rserve.pid
  `ps -C Rserve -o pid=`.strip
end

.running?Boolean

Returns:

  • (Boolean)


11
12
13
# File 'lib/R4rb/Rserve.rb', line 11

def Rserve.running?
  !Rserve.pid.empty?
end

.start(rserve = File.expand_path("~/bin/Rserv")) ⇒ Object



15
16
17
# File 'lib/R4rb/Rserve.rb', line 15

def Rserve.start(rserve=File.expand_path("~/bin/Rserv"))
  `R CMD #{rserve}` unless Rserve.running?
end

.stopObject



20
21
22
23
24
25
26
27
# File 'lib/R4rb/Rserve.rb', line 20

def Rserve.stop
    pid=Rserve.pid
  `kill #{pid}` unless pid.empty?
  sleep(2)
  if Rserve.running?
    puts "Sorry! but the Rserver is still running!"
  end
end

.try_eval(code, cli = nil) ⇒ Object



124
125
126
127
128
129
# File 'lib/R4rb/Rserve.rb', line 124

def Rserve.try_eval(code,cli=nil)
    cli=Rserve.cli unless cli
  try_code=".result_try_code<-try({\n"+code+"\n},silent=TRUE)\n"
  puts Rserve.output(try_code,cli).join("\n")
  puts R2rb.output(Rserve.completed_code(".result_try_code",false)) if "inherits(.result_try_code,'try-error')".to_R
end