【问题标题】:R: Return function call as string unevaluatedR:将函数调用作为未评估的字符串返回
【发布时间】:2014-04-13 11:04:45
【问题描述】:

我非常希望能够对函数的参数进行完全操作、解析和做任何我想做的事情。我认为实现这一点的最佳方法是将... 转换为字符串的函数。比如:

f(345,x=234,randomcharacters()+34-321==1) 
[1] "f(345,x=234,randomcharacters()+34-321==1)"

但这真的不是我想要的结果,因为我希望能够将它嵌入到另一个函数中:

g <- function(...) callstr(...)
g(345,x=234,randomcharacters()+34-321==1) 
[1] "g(345,x=234,randomcharacters()+34-321==1)"

【问题讨论】:

  • 另一种方法可能是使用body() 来操作函数的内部,并在调用新修改的函数之前根据需要“重建”它。

标签: r function arguments


【解决方案1】:

这与您昨天的问题R: Can you make my ugly text concacting function pretty 的答案几乎相同:使用sys.calldeparse

g <- function(...)deparse(sys.call())

g(345,x=234,randomcharacters()+34-321==1)
# [1] "g(345, x = 234, randomcharacters() + 34 - 321 == 1)"

【讨论】:

  • 谢谢,但不一样。不幸的是,我意识到我昨天的问题并没有让我到达我需要去的地方,因为需要从嵌套函数中调用 sys.call()。也许是通过改变环境?看到问题f &lt;- function(...) g(...) ; f(345,x=234,randomcharacters()+34-321==1); [1] "g(...)"
  • @fsmart: g &lt;- function(...)deparse(sys.call(-1))?
  • 是的!太感谢了。你不知道我花了多少时间在这些东西上兜圈子。
  • match.call() 可能会更好,而且您不太可能真的想把它变成一个字符串。有关详细信息,请参阅adv-r.had.co.nz/Expressions.html
猜你喜欢
  • 2020-11-01
  • 2021-05-21
  • 2018-10-03
  • 2011-08-03
  • 1970-01-01
  • 2021-05-22
  • 1970-01-01
  • 1970-01-01
  • 2014-01-28
相关资源
最近更新 更多