2017-02-21 3 views
1

한 대의 컴퓨터에서 R 인스턴스의 메모리로로드 된 큰 data.frame이 있고 Rserve를 사용하여 원격 클라이언트에서이 데이터에 액세스 할 수 있습니다. 나는 열을 추가하거나 값을 변경하는 것과 같이 원격으로 data.frame을 변경할 수 있기를 바라고 있으며이 변경 사항을 다른 클라이언트가 사용할 수있게하고 싶습니다. I 번째 클라이언트와 연결될 때Rserve로 내부 데이터 변경

# server side 
> xxx<-data.frame(a=1:3,b=4:6) 
> run.Rserve(port = 6311, ...) 

# client side 
> cc<-RSconnect(port=6311, ...) 
> RSeval(cc,'xxx$c<-7:9') 
> RSeval(cc,'xxx') 
    a b c 
1 1 4 7 
2 2 5 8 
3 3 6 9 

그러나 변화를 보지 않는다 : 서버는 내부 데이터를 정지

# another client 
> cc2<-RSconnect(port=6311, ...) 
> RSeval(cc2,'xxx') 
    a b 
1 1 4 
2 2 5 
3 3 6 

도 변하지 않는다. 변경 사항은 클라이언트를 만든 클라이언트 만 사용할 수 있습니다. 실제로 필요한 것은 아닙니다.

이 방법을 만들 수있는 방법이 있습니까?

+0

개별 세션에서 데이터베이스 또는 외부 플랫 파일을 사용하여 읽기/쓰기를 수행합니다 . 'data.table''fread'와'fwrite'를 사용하면 과부하라고 생각되는 데이터를 추측 할 수 없습니다. –

+0

고마워, 나는 그 일을 할 것이지만, 나는 Rserve를 사용하여 그것을 직접 할 수있는 방법을 찾았다. –

답변

0

발견! 대답은 RSclient 패키지 매뉴얼에 있었는데, 그냥주의 깊게 다시 읽어야했다.

이 작업을 수행하는 방법은 RSserverEval을 사용하는 것입니다. 이 명령은 현재 연결에서 사용 가능한 데이터가 아니라 원래 서버 데이터를 변경합니다. 따라서 변경 한 클라이언트는 나중에 사용할 클라이언트 만 사용할 수 있습니다. 서버가 명령을 수행하고 클라이언트가 작성한 데이터를 사용할 수 없기 때문에 조금 성가 시지만 필자가 필요한 것은 수행합니다. 서버가 제어 명령을 사용하도록 구성되어야한다는 점에 유의해야합니다 (구성 파일에서 명령 사용 가능)