我有一个大型data.frame加载到一台机器上的R实例的内存中,我使用Rserve允许从远程客户端访问这些数据。我希望能够远程更改data.frame,例如添加列或更改值,我希望这些更改可供其他客户端使用。
# 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 :(得分:0)
发现它!!答案在RSclient软件包手册中,只需仔细阅读即可。
执行此操作的方法是使用RSserverEval。此命令更改原始服务器数据,而不是当前连接中可用的数据。因此,进行更改的客户端无法使用它们,只能使用稍后连接的客户端。这有点烦人,因为服务器将执行命令,它不能使用客户端创建的数据,但它可以满足我的需要。请务必注意,必须将服务器配置为启用控制命令(配置文件中的命令启用)