3

RSRuby を使用して、Ruby と R を接続しようとしています。

私のapplication_controllerには次のものがあります:

def InitR
    @r = RSRuby.instance
    return @r
end

私が作るとき:

@r = InitR()

ブラウザで次のように表示されます: R Function "get" not found

コンソールには次のように表示されます。

NoMethodError (R Function "get" not found):
  app/controllers/application_controller.rb:6:in `InitR'
  app/controllers/diagnostic_controller.rb:32:in `generatePdf'

いくつかの投稿で見たように、スタック制限を変更しようとしましたが、何もしないようです。

誰か何か知っていますか?

これは、私のコードが ApplicationController でどのように表示されるかです。

class ApplicationController < ActionController::Base
  protect_from_forgery

  # Make R instance available to all
  def initR
    @r = RSRuby.instance
  end

 end

インスタンスを使用する DiagnosticController は次のとおりです。

def generatePdf
    project = Project.find(session[:project_id])

    pdf = Prawn::Document.new

    sentence = RSentence.find_by_name("library").content.gsub("LIBRARY", "lattice")

    pdf.text sentence

    pdf.render_file project.name.to_s + ".pdf"

    @r = initR
    @r.eval_R(sentence)

    redirect_to :controller => "diagnostic", :action => "index" 
  end

RSRuby.instance を呼び出すと例外が発生する

4

1 に答える 1

0

ここにはいくつかの問題があります。

  1. def、InitRで大文字を使用しています-initRである必要があります
  2. インスタンス変数をそれ自体、つまり InitR メソッドの内側と外側に設定しようとしています。

試す

def initR
  @r = RSRuby.instance
end

次に、@r をインスタンス化する initR を呼び出すだけです。

@r などを使用して関数にアクセスできます@r.wilcox_text([1,2,3],[4,5,6])

OK、更新後、initR関数が機能していないようです。設定@r = initRは、 と言っているようなもの@r = @r = RSRuby.instanceです。たとえば、2 回呼び出しました。関数を使用する場合は、次のように変更します

def initR
  RSRuby.instance
end

その後、呼び出すことができます@r = initR

また、エラーが R 自体に関連しているかどうかも調べます。つまり、エラーは Ruby エラーではなく、R エラーです。Rails コンソールで生成関数の手順を実行してみてください。これにより、失敗している特定の手順が強調表示される場合があります。

于 2013-03-18T11:12:14.993 に答える