0

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

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

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

4

1 回答 1

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到正确的长度。但这很危险,特别是如果您不检查长度是否m匹配b

更好的使用版本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作为参数传入。因此,您依靠 Rb在全局工作区中找到正确的方法。这不是好的做法。相反,通过参数传入函数中所需的所有对象,就像我在示例中所做的那样。如果你这样做,你会发现更容易追踪错误等。

于 2013-01-09T10:55:56.570 回答