【问题标题】:How to pass variables to function as a vector? [duplicate]如何将变量传递为向量? [复制]
【发布时间】:2019-08-10 20:35:45
【问题描述】:

我想在函数内部以向量的形式使用 3 个变量,例如变量:L(长度)、B(宽度)、H(高度)

而不是通常的情况:

volume <- function(D,B,H) {
  vol <- H - ((5*7.2*B) / 1.7*D)
  return(vol)
}

volume(7,8,9)

我要传递x = c(D,B,H),一个由变量D、B、H组成的向量:

volume <- function(x) {
  x <- c(D,B,H) # This is incorrect 
  vol <- H - ((5*7.2*B) / 1.7*D)
  return(vol)
}

H <- 7
B <- 8
D <- 1
volume(x)

当我调用该函数时,将采用如上所示的一些输入值并返回一个音量值。

任何想法如何做到这一点?

【问题讨论】:

  • 好吧就像,vol
  • 您的问题不清楚。也许答案是vol &lt;- x[[1]] * x[[2]] * x[[3]],或者答案是do.call(somefunction, as.list(x))。
  • 是的,谢谢大家 :) 这就是我想要的。但也许是向量的形式
  • 您的问题不清楚。如果你只是想在语法上打包你的函数 args 以便你的函数体可以将它们称为D,B,H,那么要么使用命名列表,要么传入一个向量,然后解包通过索引向量D &lt;- x[[1]]; B &lt;- x[[2]]; H &lt;- x[[3]];。 R 不像 Python 那样进行元组解包,如果这正是您要寻找的。​​span>

标签: r function parameter-passing


【解决方案1】:

您可以使用命名列表:

volume <- function(x) {
  vol <- x$H-((5*7.2*x$B) / 1.7*x$D)
  return(vol)
}

H <- 7
B <- 8
D <- 1
volume(list(H = H, B = B, D = D))
[1] -162.4118

【讨论】:

  • 谢谢,但我要解决的实际方程不仅仅是乘法。我感兴趣的是:volume
  • @user727 请看看我更新的答案
猜你喜欢
  • 1970-01-01
  • 2011-06-21
  • 2012-04-01
  • 1970-01-01
  • 2019-03-14
  • 1970-01-01
  • 2015-03-21
  • 2019-11-08
  • 1970-01-01
相关资源
最近更新 更多