我需要将 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 重复向量?
我需要将 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 重复向量?
使用该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
在全局工作区中找到正确的方法。这不是好的做法。相反,通过参数传入函数中所需的所有对象,就像我在示例中所做的那样。如果你这样做,你会发现更容易追踪错误等。