【问题标题】:R: Dynamic assignment to function argument based on other argumentsR:基于其他参数动态分配函数参数
【发布时间】:2019-01-12 17:30:17
【问题描述】:

我正在编写一个带有两个参数的函数,我希望分配给一个参数的默认向量是NA 的向量,其长度与另一个任意长度的参数的输入相同。在伪代码中,我想要my_function <- function(foo, bar = rep(NA, length(foo))){}。这种方法的问题是foo 不是初始化对象,因此length(foo) 会引发错误。是否有某种方法可以在不首先初始化分配给foo 参数的对象的情况下执行此操作?

【问题讨论】:

  • 为什么说“length(foo) 抛出错误”?如我的回答所示,正如您所描述的问题,它不会引发错误。您的代码中是否还有其他可能导致问题的内容?还是它可能会引发错误的假设?如果您确实遇到了错误,您能否更新您的问题以显示错误消息是什么以及它发生的更完整的上下文?

标签: r function variable-assignment


【解决方案1】:

这种事情不会报错:

f <- function(foo, bar = rep(NA, length(foo))) {
    print(foo)
    print(bar)
}

f(1:10)

 [1]  1  2  3  4  5  6  7  8  9 10
 [1] NA NA NA NA NA NA NA NA NA NA

【讨论】:

  • 我实际上在我的工作示例中打错了,但它确实有效。虽然,我很惊讶这项工作,因为长度(foo)不需要在评估之前有一个 foo 对象,但是所有参数都是一次评估的?
  • @user3614648 参数实际上不是一次全部计算的;这样的参数实际上是promises,只有在访问时才会被评估。有关更多信息,请参阅,例如this excerpt 来自 Hadley Wickham 的 Advanced R.
猜你喜欢
  • 1970-01-01
  • 2015-07-30
  • 1970-01-01
  • 2023-02-22
  • 2015-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-07
相关资源
最近更新 更多