函数中的矢量参数

时间:2013-01-09 10:50:54

标签: r function vector parameters

我需要定义t是依赖于用户输入的重复元素的三维向量,即t = c(m,m,m),然后使用函数:

b <- c(0.5,0.2,1)  
fn <- function(m) { sum(t-b) }

有没有办法让我告诉R t是一个带有元素m的3d重复向量?

1 个答案:

答案 0 :(得分:1)

使用rep()功能,有一个选项:

b <- c(0.5,0.2,1)

fn <- function(m, b) {
  t <- rep(m , 3)
  sum(t-b)
}

> fn(2, b)
[1] 4.3

在这种情况下你可以依赖回收:

fn2 <- function(m, b) {
  sum(m-b)
}

> fn2(2, b)
[1] 4.3

其中R自动将m扩展为正确的长度。这很危险,特别是如果您不进行任何检查以查看mb的长度是否匹配。

使用rep()的更好的版本不是硬编码t需要的长度,而是从b获取该长度,如:

fn3 <- function(m, b) {
  t <- rep(m , length(b))
  sum(t - b)
}

> fn3(2, b)
[1] 4.3
> b <- c(b, b) ## make `b` longer
> length(b)
[1] 6
> fn3(2, b)    ## fn3() still works
[1] 8.6

关于你的说明fn();你在函数中引用了b 但是没有传递b作为参数。因此,您依靠R在全局工作空间中找到正确的b。这不是好习惯。相反,通过参数传递函数中所需的所有对象,就像我在我的示例中所做的那样。如果您这样做,您会发现错误更容易追踪等。