Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何覆盖R中的变量查找?_R_Variables_Ipc_Scoping - Fatal编程技术网

如何覆盖R中的变量查找?

如何覆盖R中的变量查找?,r,variables,ipc,scoping,R,Variables,Ipc,Scoping,是否可以重新定义R查找变量的方式 具体来说,我有两个R进程:客户机和服务器。我想对服务器进程的变量作用域规则进行以下扩展:如果在任何父环境中都找不到x,则改为查询客户端进程的x: 这可能吗 背景 目前我正在做一些工作,客户机进程可以向服务器进程发出命令来执行。然而,命令不可避免地对数据(驻留在客户机上)进行操作,目前我被迫手动硬编码每个需要从客户机导出到服务器的变量 我也不喜欢简单地导出客户机进程的整个全局环境的选项,它可能包含许多对处理手头的命令没有用处的冗余数据 对于服务器来说,只要在需要变

是否可以重新定义R查找变量的方式

具体来说,我有两个R进程:客户机和服务器。我想对服务器进程的变量作用域规则进行以下扩展:如果在任何父环境中都找不到
x
,则改为查询客户端进程的
x

这可能吗

背景 目前我正在做一些工作,客户机进程可以向服务器进程发出命令来执行。然而,命令不可避免地对数据(驻留在客户机上)进行操作,目前我被迫手动硬编码每个需要从客户机导出到服务器的变量

我也不喜欢简单地导出客户机进程的整个全局环境的选项,它可能包含许多对处理手头的命令没有用处的冗余数据


对于服务器来说,只要在需要变量时从客户端查询任何变量就更好了。

这在我看来是非常懒惰和危险的,我建议不要这样做

服务器代码应该知道需要从客户端获取哪些变量,并且应该显式地获取这些变量,而不是等待尝试捕获“未定义变量”错误

如果服务器代码试图获取
x$foo
,其中
x
是服务器上的列表,但没有
$foo
元素,该怎么办?对于不存在的对象的赋值呢?打字错误呢

每个程序中应该只有一个变量诞生的点,在这一点上,你要么用一个值定义它,要么从服务器获取它的值——没有必要尝试和懒惰


您可能会编写只在客户机-服务器环境中运行的代码,因此很难进行测试

在服务器上执行类似于
parent.env(.GlobalEnv)@matthewPlourd的操作怎么样谢谢,但是我的客户端进程的
.GlobalEnv
包含数百MB到几GB的数据!当向服务器发出命令时,可能只需要选择一小部分变量,因此从客户端导出所有变量(基本上就是您所说的)在这里是一个效率太低的解决方案。[将这一点添加到问题中]我不清楚他是否真的这么说,特别是对于
.parent.env(.GlobalEnv)
# i.e. when (in the server process) I write
x

# I actually mean:
if (exists("x")) {
    x
} else {
    getFromClient("x", port = 1234L)
}