我正在尝试使用 RSRuby 连接 Ruby 和 R。
在我的 application_controller 中,我有以下内容:
def InitR
@r = RSRuby.instance
return @r
end
当我做的时候:
@r = InitR()
它在浏览器中引发以下消息:R 函数“get”未找到
并在控制台中显示:
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 时出现异常
最佳答案
这里有几个问题。
- 你在 def 中使用了大写字母 InitR - 应该是 initR
- 您正在尝试将实例变量设置为其自身,即在 InitR 方法内部和外部。
尝试
def initR
@r = RSRuby.instance
end
然后调用initR,它会实例化@r
您可以使用@r 访问函数,例如@r.wilcox_text([1,2,3],[4,5,6])
好的,根据您的更新,initR 函数似乎已失效。设置@r = initR
,就像说@r = @r = RSRuby.instance
,例如你已经打过两次电话了。如果您想使用该功能,请将其更改为
def initR
RSRuby.instance
end
然后你可以调用@r = initR
此外,它会查看错误是否与 R 本身有关,即错误不是 Ruby 错误,而是 R 错误。您能否尝试在 Rails 控制台中运行生成函数中的步骤,这可能会突出显示哪个特定步骤失败了。
关于ruby-on-rails - NoMethodError(未找到 R 函数 "get"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15475006/