首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字符串转换为对象--但是转换为实际文本,而不是求值。

将字符串转换为对象--但是转换为实际文本,而不是求值。
EN

Stack Overflow用户
提问于 2019-03-12 01:41:53
回答 1查看 48关注 0票数 0

不要认为这是重复的,因为我想要的是实际的代码/文本,而不是评估。

我正在构建一个函数,它要求输入如下所示:

代码语言:javascript
复制
compss[[1]](x[1],x[2])

其中compss是一个函数列表,我正在调用列表中的第一个函数,并使用参数x1和x2。

问题

我想建立一个一般情况,当我有两个以上的变量时,我得到:

代码语言:javascript
复制
compss[[1]](x[1],x[2],x[3],.....)

(如in所示,我输入n= 5,得到上面的实际代码,但不超过x5)

我失败的方法

所以我最初的想法是先用n个“xi”来创建一个向量,

代码语言:javascript
复制
argss <- NULL
  for (i in 1:length(variable.limits)){
    argss <- c(argss, text = paste("x","[", i, "]", sep =""))
  }

这意味着:

代码语言:javascript
复制
"x[1]" "x[2]" ....

然后,我认为使用解析会有帮助,但这提供了:

代码语言:javascript
复制
expression(x[1], x[2])

我可以用do.call等.但问题是,我只想要符号/对象/变量在那里。原因是我将其运行到一个优化函数中,其中x1没有设置值,因此do.call似乎失败了。有什么想法吗?

注释响应

针对这些评论,r2evans解决方案使用:

代码语言:javascript
复制
list_of_xs <- list(x[1], x[2], x[3])
do.call(compss[[1]], list_of_xs)

也许是解决这个问题的最好方法,所以现在剩下的唯一问题是如何概括"list_of_xs“。

我的用例是为一个非线性规划设计一个成本函数:

代码语言:javascript
复制
func <- function(x){
x[1]*x[2]*x[3] + (x[1]^2 - x[3]*x[2])
}

但是我试图在我的框架内设计它,所以它适用于一般的问题,在这里我们可以说是x100。我正在使用的包,即"nloptr",要求您以某种形式输入成本函数,我认为,我是这个包的新手。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-12 02:56:44

首先在txt中创建字符表示,然后对其使用parse。在解析的对象上使用[1]返回一个call对象,我假设这是您想要的。

代码语言:javascript
复制
n <- 3
txt <- sprintf("compss[[1]](%s)", toString(paste0("x[", 1:n, "]")))
cobj <- parse(text = txt)[[1]]
cobj
## compss[[1]](x[1], x[2], x[3])

# check that we can evaluate cobj
compss <- list(function(a, b, c) a + b + c)
x <- 1:3
eval(cobj)
## [1] 6
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55112879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档