RinRuby:优化代码

时间:2014-10-05 16:07:13

标签: ruby-on-rails ruby r

我试图在我的rails应用程序中使用RinRuby ...我可以通过两种方式编写相同的代码。 1)使用R.eval语句

R.eval "integrand <- function(q) {((-log(#{n}) + q*log(q) + (1-q)*log((1-q)/(#{n}-1)))^2)*(q^#{a}*(1-q)^#{b}*1/beta(#{a},#{b}))}"
R.eval "integ <- integrate(integrand, lower = 0, upper = 1)$val"
R.eval "eig <- (log(#{n}) - (#{b}/(#{a}+#{b}))*log(#{n}-1) - digamma(#{a}+#{b}+1) + (#{a}*digamma(#{a}+1)+#{b}*digamma(#{b}+1))/(#{a}+#{b}))"
R.eval "r_output <- (integ - eig)"
val = R.pull "r_output"

和2)使用EOF环绕代码

r = RinRuby.new(:echo => false)
r.eval <<-EOF
  integrand <- function(q) {((-log(#{n}) + q*log(q) + (1-q)*log((1-q)/(#{n}-1)))^2)*(q^#{a}*(1-q)^#{b}*1/beta(#{a},#{b}))}
  integ <- integrate(integrand, lower = 0, upper = 1)$val
  eig <- (log(#{n}) - (#{b}/(#{a}+#{b}))*log(#{n}-1) - digamma(#{a}+#{b}+1) + (#{a}*digamma(#{a}+1)+#{b}*digamma(#{b}+1))/(#{a}+#{b}))
  r_output <- (integ - eig)
EOF
val = r.pull "r_output"

预计一种形式会比另一种形式更快吗? 我想优化我的代码,所以我想使用第二个。 第一种形式也是在执行时回显RinRuby语句,但它们在第二种形式中被关闭。所以我认为这会优化代码但事实并非如此,事实上第二种情况需要花费更多时间......任何人都可以提供帮助。

0 个答案:

没有答案