2016-08-03 97 views
0

我在使用RInside和控制檯時遇到了問題。這些都在ubuntu 14.04上運行,使用通過CRAN的apt-get安裝的R 3.2.4。這裏是C++和R代碼:當通過RInside運行時,在abline中出現錯誤

#include <RInside.h>       // for the embedded R via RInside 

int main(int argc, char *argv[]) { 

    RInside R(argc, argv);      // create an embedded R instance 
    R.parseEval("source('abline.R')"); 
} 

abline.R

bp <- data.frame(
    age = c(28, 23, 52, 42, 27, 29, 43, 34, 40, 28), 
    systolic = c(70, 68, 90, 75, 68, 80, 78, 70, 80, 72)) 
str(bp) 
attach(bp) 

bp.lm <- lm(systolic ~ age) 

plot(age, systolic) 
abline(bp.lm) 
lines(lowess(age, systolic, f=0.75), lty=2) 

將R代碼工作正常,從控制檯,但錯誤是在程序運行時。

[email protected]:/tmp/abtest$ ./abtest 
'data.frame': 10 obs. of 2 variables: 
$ age  : num 28 23 52 42 27 29 43 34 40 28 
$ systolic: num 70 68 90 75 68 80 78 70 80 72 
Error in if (noInt) { : argument is of length zero 
terminate called after throwing an instance of 'std::runtime_error' 
    what(): Error evaluating: source('abline.R') 
Aborted (core dumped) 

if (noInt) {是從abline的(線18在我的版本的R)源。我完全難以理解爲什麼這隻會發生在通過RInside。

任何想法?

+1

'附加()'是一切罪惡的根源。使用'lm()'的'data ='參數。您可能還需要設置與處理圖形輸出相關的內容。最後,這不是一個Rcpp問題。 '這更像一個'RInside'問題,所以我刪除了Rcpp標籤。 – coatless

回答

1

適用於我,沒有任何問題。 Ubuntu 16.04。暗戰的例子目錄,以獲得GNUmakefile基於建立自由:

~/git/rinside/inst/examples/standard(master)$ vi soquestion.cpp 
~/git/rinside/inst/examples/standard(master)$ make soquestion 
ccache g++ -I/usr/share/R/include -I/usr/local/lib/R/site-library/Rcpp/include \ 
    -I/usr/local/lib/R/site-library/RInside/include -g -O3 -Wall -pipe \ 
    -Wno-unused -Wall soquestion.cpp -Wl,--export-dynamic -fopenmp \ 
    -L/usr/lib/R/lib -lR -lpcre -llzma -lbz2 -lz -lrt -ldl -lm -lblas -llapack \ 
    -L/usr/local/lib/R/site-library/RInside/lib -lRInside \ 
    -Wl,-rpath,/usr/local/lib/R/site-library/RInside/lib -o soquestion 
~/git/rinside/inst/examples/standard(master)$ vi abline.R 
~/git/rinside/inst/examples/standard(master)$ ./soquestion 
'data.frame': 10 obs. of 2 variables: 
$ age  : num 28 23 52 42 27 29 43 34 40 28 
$ systolic: num 70 68 90 75 68 80 78 70 80 72 
~/git/rinside/inst/examples/standard(master)$ 

我真的只是複製粘貼的你的兩個文件。另外:

~/git/rinside/inst/examples/standard(master)$ ls -1tr | tail -4 
soquestion.cpp 
soquestion 
abline.R 
Rplots.pdf 
~/git/rinside/inst/examples/standard(master)$ 

你可能想通過pdf()png()打開設備文件...

+0

我不知道爲什麼我沒有檢查它,但我使用的是舊版本的RInside,因爲我不得不修改RInsideConfig.h,並且我添加了一個新的解析方法,返回結果代碼,以便不完整的響應可以由主叫方處理。爲我的更改制作補丁並將其應用於0.2.13可解決此問題。 –

+0

很高興知道它的作品。那麼我是否應該改變上游以對「不良」投入採取更寬容的態度?您可以提交問題單/發送拉取請求嗎? –

相關問題