如何在嵌套函数中使用match.call

时间:2016-02-16 00:29:31

标签: r function arguments

我试图在函数组合中获取int sumOfHammingDistance(vector<unsigned>& nums) { int n = sizeof(unsigned) * 8; int len = nums.size(); vector<int> countOfOnes(n, 0); for (int i = 0; i < len; i++) { for (int j = 0; j < n; j++) { countOfOnes[j] += (nums[i] >> j) & 1; } } int sum = 0; for (int count: countOfOnes) { sum += count * (len - count); } return sum; } 中的名称和表达式列表。让我们假设一个函数:

...

如果我们打电话:

g <- function(...) {
  print(as.list(match.call(expand.dots = FALSE))$...)
}

我们得到:

g(rnorm(5), par = "a", 4 + 4)

它很好:我们可以为每个参数获取表达式调用并验证。但我需要这个但是在功能组合

[[1]]
rnorm(5)

$par
[1] "a" 

[[3]]
4 + 4

但我明白了:

f <- function(...)  g(...)

f(rnorm(5), par = "a", 4 + 4)

我正在阅读一些章节http://adv-r.had.co.nz/Expressions.html,但我还无法找到解决方案。我知道,我需要科普学习。

任何提示?提前谢谢。

1 个答案:

答案 0 :(得分:4)

如果您只想要参数,则不需要整个通话。只需使用substitute()即可访问...而不是match.call

g <- function(...) {
    print(substitute(...()))
}

f <- function(...)  g(...)
f(rnorm(5), par = "a", 4 + 4)

# [[1]]
# rnorm(5)
# 
# $par
# [1] "a"
# 
# [[3]]
# 4 + 4

还有Hadley's recommendation

g <- function(...) {
    print( eval(substitute(alist(...))))
}