将Ruby数组转换为R数组或向量

时间:2013-11-23 04:08:57

标签: ruby arrays r quantmod

当我将Ruby数组转换为R中的向量时,我遇到了问题。

def self.risk_return_plot(stock_ticker = ["VZ", "CHU", "T", "VOD", "DTEGY"])
   RSERVE.eval <<EOF
   myenv <- new.env()
   getSymbols("#{@stock_ticker}", env = myenv)
   monthly.Return <- do.call(merge, c(eapply(myenv, monthlyReturn), all=FALSE))
   names(monthly.Return)[1:ncol(monthly.Return)] <- paste("#{@stock_ticker}", 1:ncol(monthly.Return), sep="")
   EOF
end

当我将命令发送到R服务器时,它会显示一条错误,指出Eval错误:getSymbols(["VZ", "CHU", "T", "VOD", "DTEGY"]),而R中的正确类型为getSymbols(c("VZ", "CHU", "T", "VOD", "DTEGY"))

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你想在运行中创建R代码片段,并在R服务器上执行它。

您需要对代码进行一些修复:

def self.risk_return_plot(stock_ticker = ["VZ", "CHU", "T", "VOD", "DTEGY"])
   # creates a R vector version from stock_ticker array
   # enclose each item with " char, join with ',' and enclose all with c()
   r_vector = "c(#{stock_ticker.map() {|item| "\"#{item}\""}.join(',')})"
   # send R command string to the server
   RSERVE.eval <<-EOF
   myenv <- new.env()
   getSymbols(#{r_vector}, env = myenv)
   monthly.Return <- do.call(merge, c(eapply(myenv, monthlyReturn), all=FALSE))
   names(monthly.Return)[1:ncol(monthly.Return)] <- paste(#{r_vector}, 1:ncol(monthly.Return), sep="")
   EOF
end