保存這個.cpp的代碼,我在Mac OS X上運行的代碼段類似的問題似乎總是返回1
。但是,如果我以下列方式修改代碼,它的工作原理:
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
int test(List map) {
int val = as<int>(map["test"]);
return(val);
}
/*** R
map <- list(test = 200, hello = "a")
test(map)
*/
這看起來似乎與類型推斷腳麻 - 編譯器應該「知道」,因爲我們分配map["test"]
到int
-聲明的變量,它應該被轉換爲int
,但似乎並非如此。所以,爲了安全起見 - 請確保as
列出R列表中的任何內容。
此外,值得一提的是:在R 200
是double
;如果你想明確地通過一個int
你應該寫200L
。
FWIW,我與clang++
編譯:
> clang++ -v
Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn)
Target: x86_64-apple-darwin12.4.0
Thread model: posix
和
> sessionInfo()
R version 3.0.0 (2013-04-03)
Platform: x86_64-apple-darwin10.8.0 (64-bit)
locale:
[1] en_CA.UTF-8/en_CA.UTF-8/en_CA.UTF-8/C/en_CA.UTF-8/en_CA.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] Rcpp_0.10.4
我只是想你的代碼是,使用'sourceCpp',我得到了200什麼是你的'sessionInfo' ? – dickoa
R版本3.0.1(2013-05-16) 平臺:x86_64-apple-darwin10.8.0(64位) 區域設置: [1] zh_CN.UTF-8/zh_CN.UTF-8/zh_CN。 UTF-8/C /的en_US.UTF-8 /的en_US.UTF-8 附基礎包: [1]統計圖形grDevices utils的數據集的方法基礎 其他附軟件包: [1] foreach_1.4.1 fpc_2.1 -5 flexmix_2.3-10 lattice_0.20-15 mclust_4.1 cluster_1.14.4 [7] MASS_7.3-26 Rcpp_0.10.3 通過命名空間(並未附加)加載: [1] codetools_0.2- 8 grid_3.0.1 iterators_1.0.6 modeltools_0.2-19 stats4_3.0.1 [6] tools_3.0.1 –
我使用linux不是mac,不知道它是否相關。但在我的設置中,我有'packageVersion(「Rcpp」)=='0.10.4''。嘗試從r-forge上傳Rcpp並再次運行代碼。 – dickoa