【问题标题】:Call and Eval function inside RR中的调用和评估函数
【发布时间】:2011-07-12 20:58:02
【问题描述】:

我正在编写一个函数,我想提供一个变量,该变量包含要在函数内部评估的条件。例如,我有一个 hourval 变量,其中包含 0, 3, 6, 9, 18, 3, 6, 9, 18 0, 3, 18 ... 我想选择 hourval 变量与 0、6 匹配的索引. 这个 0, 6 可能会根据其他一些参数而改变。基本上它们并不总是固定的。所以我传递了一个变量g1 = call("which", (hourval==0 | hourval == 6))。我希望在程序中评估此语句。因此我使用声明x1 = eval(g1)。显然,当我传递变量g1时,那个时间hourval变量并没有生成,而是在eval(g1)语句之前生成的。我收到错误,找不到对象hourval。有没有其他方法可以解决这个问题。

在此先感谢,如果有任何帮助,我们将不胜感激。

纳拉亚尼酒吧

【问题讨论】:

  • 我认为,如果我们了解您如何获得这些参数,我们会更好地了解您在做什么。一个小的工作示例将有很长的路要走。这里有一个小帖子可以提供一些帮助:stackoverflow.com/questions/5963269/…
  • 也许见subset.data.frame的代码;这可能有助于您入门。另一方面,您可能想考虑另一种解决问题的方法;以您概述的方式解决方案往往比它们的价值更麻烦。
  • 请不要交叉发帖,尤其是不要发到不相关的邮件列表:stat.ethz.ch/pipermail/r-sig-geo/2011-July/012211.html
  • 我的错。我邀请 Narayani 在这里发布他的问题(因为它本质上是编程而不是地统计)。我应该明确指出至少提及交叉发布。

标签: r call eval


【解决方案1】:

这是你想要的吗?

> hourval <- c(0, 3, 6, 9, 18, 3, 6, 9, 18, 0, 3, 18)
> test <- c(0,6)
> which(hourval %in% test)
[1]  1  3  7 10

用这个搜索策略我花了一段时间才找到它

library(fortunes)
fortune("parse")

但最终还是得到了我记得的那个:

> fortune("parse")

If the answer is parse() you should usually rethink the question.
   -- Thomas Lumley
      R-help (February 2005)

我的部分困难在于我记得这句话有“eval(parse(”。

【讨论】:

  • 我看到你过去已经发布过了。 Lumley 应该在 SO 上获得大约 1000 点奖励积分。
  • 谢谢托马斯..第一个选项对我有用。我可以将“测试”序列作为参数发送,然后使用 which(hourval %in% test) 语句代替 eval(g1)。非常感谢
  • 我经常在我的工作场所引用那笔特别的财富,因为我的同事喜欢 eval/parse。这是一个老歌,但很好。
【解决方案2】:

这就是你所描述的

f1 <- function(y) {
  hourval <- c(0, 3, 6, 9, 18, 3, 6, 9, 18, 0, 3, 18)
  eval(substitute(y))
}
f1( which(hourval %in% c(0,6)) )

但这是我要做的。

f2 <- function(y) {
  hourval <- c(0, 3, 6, 9, 18, 3, 6, 9, 18, 0, 3, 18)
  which(hourval %in% y)
}
f2( c(0,6) )

但同样,目前还没有足够的信息来知道其中任何一个是否能回答问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    • 2018-05-02
    相关资源
    最近更新 更多