2016-08-03 4 views
0

RInside와 콘솔을 사용하여 문제가 있습니다. 이것은 CRAN에서 apt-get을 통해 설치된 R 3.2.4를 사용하여 우분투 14.04에서 모두 실행됩니다. 프로그램이 실행될 때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 코드는 콘솔에서 잘 작동하지만 오류 다음은 C++ 및 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) {는 (R 버전 내에서 라인 (18)) abline의 소스이다. 나는 이것이 RInside를 통해서만 일어나는 이유에 관해서 완전히 비틀어졌다.

아이디어가 있으십니까?

+1

는'()'모든 악의 뿌리입니다 연결합니다. 'lm()'의'data ='인수를 사용하십시오. 그래프 출력 처리와 관련된 설정도 필요합니다. 그리고 마지막으로 이것은 Rcpp 질문이 아닙니다. 'Tis가 RInside라는 질문을 더 많이하므로 Rcpp 태그를 제거하고 있습니다. – coatless

답변

1

저의 문제없이 작동합니다. 우분투 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

왜 내가 체크하지 않았는지 모르겠지만, RInsideConfig.h를 수정해야만 RInside의 이전 버전을 사용하고 있으며 결과 코드를 반환하는 새로운 구문 분석 메소드를 추가하여 불완전한 응답을 얻을 수 있습니다. 호출자가 처리합니다. 변경 사항에 대한 패치를 작성하여 0.2.13에 적용하면 문제가 해결됩니다. –

+0

잘 작동하는 것이 좋습니다. 그리고 '나쁜'입력에 대해 더 관대하기 위해 내가 상류로 바꿔야 할 것이 있습니까? 발급 티켓을 신청하거나 당겨 요청을 보낼 수 있습니까? –