.C
을 사용하여 R에서 C 함수를 호출 중입니다. 이것은 몇 분 동안 실행될 시뮬레이션이며 몇 번의 반복을 할 때마다 진행 상황에 대한 정보를 R로 보내고 싶습니다. 즉, C 함수가 모든 정보를 보내기까지 기다릴 필요가 없습니다. R에 한 번만 기입하십시오.C에서 R로 데이터 전달하기
참고 : R (Rprintf
않습니다)에서 인쇄하고 싶지 않습니다. 하지만 나는 이러한 정보를 R에 전달하고 싶습니다. 이 포함되어있는 경우 error
을 사용하면 R에 오류가 전달되지만 예외 처리에는 관심이 없습니다.
내 첫 번째 방향 : R에서 futile.logger
을 사용하여 이러한 항목을 기록합니다. 이러한 정보가 호출 R 함수가 사용하는 것과 동일한 로거에 전달 될 수 있다면 좋을 것입니다. 하지만 웹상에서 예제를 찾을 수 없었습니다.
대체 방향 : 또한 redis를 사용하여 캐시에 정보를 쓰고 나머지는 redis db에 연결합니다. 하지만 redis에 C 인터페이스를 찾을 수 없습니다. 루아를 사용하고 싶지 않습니다. 가장 가까운 것은 Writing a Custom Redis Command In C - Part 2입니다.
하지만 제 의견에는 훨씬 더 간단합니다. 아이디어가 있으십니까?
업데이트 : 이것이 내가 이상적으로 작동하는 방법입니다.
# PART 1: webserver calls R function
# the R call
res = .C("montecarlo_sampler.c", as.matrix(inputData), as.matrix(ouputData), as.integer(iterations))
// PART 2: the C function
void montecarlo_sampler(double *inputData, double *outputData, int *iterations){
// do some preprocessing
int iter =1;
while(iter<1000000){
if(iter % 1000 == 0) {
// summarize output from last 1000 iterations
// dump summary data to a logger or redis
}
// do usual sampling stuff in C
}
}
PART 3:
// listening on the django side
// polls redis every few seconds to see if update has reached.
// sends summary output for visualization to client
어떤 종류의 진행 정보가 필요합니까? 데이터를 소비하려는 경우 가장 쉬운 방법은 C 함수에 인덱스 인수를 추가하는 것입니다.이 인수는 문제의 일부만을 계산하여 R에 출력하고 색인의 다음 부분을 계산할 수있게합니다. 문제. –
http://stackoverflow.com/questions/6658168/passing-a-data-frame-from-to-r-and-c-using-call이 유용 할 수 있습니다. – Tim
@KarlForner - 저는 시뮬레이션을하고 있습니다. 그래서 매 회마다 100,000 번 반복되는 추정 된 매개 변수 값을 출력하고 싶습니다. 이 매개 변수 값은 다른 엔진이 간헐적으로 도착할 때 및 사용할 때 사용됩니다. – user1971988