将表达式传递到evalServer

将表达式传递到evalServer,r,svsocket,R,Svsocket,使用包svSocket我试图在服务器中执行一个通用表达式 expr <- "demo<-new.env()" evalServer(con, expr, expr) > evalServer(con, parse(text=expr)) Error in source(objcon, local = TRUE, echo = FALSE, verbose = FALSE) : objcon:1:65: unexpected '<' 1: ..Last.value &

使用包
svSocket
我试图在服务器中执行一个通用表达式

expr <- "demo<-new.env()"
evalServer(con, expr, expr)
> evalServer(con, parse(text=expr))
Error in source(objcon, local = TRUE, echo = FALSE, verbose = FALSE) : 
  objcon:1:65: unexpected '<'
1: ..Last.value <-structure(expression(demo<-new.env()), srcfile = <

这里是你想要做的工作

首先,在终端窗口中使用套接字服务器启动R:

$ R
> require(svSocket)
> startSocketServer()
> 
然后,在另一个R进程中,加载svSocket,连接到套接字服务器并使用
evalServer()

然后,您必须指示服务器解析和评估他那边的代码。客户:

RClient> evalServer(con, eval(parse(text = expr)))
您可以检查demo对象是否在服务器中创建,是否在客户端中属于正确的类(这里的对象是可序列化的,因此,没有问题):

当然,在操作客户端的“演示”时,您也必须小心。最后不要忘记:

RClient> close(con)

函数中可能存在的错误
evalServer(con,demo@SimonO101)感谢您的编辑。是的!我也有同样的行为。
evalServer(con,parse(text=expr))
确实创建了环境,以前没有检查过……目前还不错。但仍然不好,因为我无法实现正确的错误处理。
class(try(evalServer(…))
尝试错误
。所以我必须“手动”检查
是否存在
是否有效。嗨!谢谢你加入我的讨论!你说得对,我不清楚。特别是对于一个全新的标签(我觉得可以随意创建,顺便说一句,我想你可能想要更改/改进它).无论如何,我确实做了上述所有操作,但我忘了确保返回
NULL
!谢谢。准备好了更多的问题(希望不要那么愚蠢):)。
RClient> evalServer(con, expr, "demo <- new.env(); NULL")
RClient> evalServer(con, eval(parse(text = expr)))
RClient> evalServer(con, ls())
[1] "demo" "expr"
RClient> evalServer(con, class(demo))
[1] "environment"
RClient> 
RClient> close(con)