2013-11-23 53 views
0

我而我轉換一個Ruby陣列到載體中R.轉換紅寶石陣列成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"]),正確的類型將是getSymbols(c("VZ", "CHU", "T", "VOD", "DTEGY")) R.

+1

我不明白你的問題。你已經在Ruby中定義了一個數組?並試圖閱讀使用R?是這樣的,中介步驟是什麼 - 你是否將數組寫入一個文件以供R讀取?困惑。 – SlowLearner

+0

您是否在使用[RinRuby](https://sites.google.com/a/ddahl.org/rinruby-users/)? – AGS

+0

是的。我使用Rinruby和R.eval << EOF – user3015546

回答

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 
+0

我運行它,它仍然顯示一個錯誤:RinRuby :: ParseError:在eval上的解析錯誤:getSymbols(「c(」VZ「,」​​CHU「,」T「,」VOD「,」DTEGY「)」,env = myenv),我們需要刪除c(「VZ」,「CHU」,「T」,「VOD」,「DTEGY」)之外的「」。 – user3015546

+0

我忘了刪除。現在沒事了。 –