当我将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"))
。
答案 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