我需要定义t是依赖于用户输入的重复元素的三维向量,即t = c(m,m,m),然后使用函数:
b <- c(0.5,0.2,1)
fn <- function(m) { sum(t-b) }
有没有办法让我告诉R t是一个带有元素m的3d重复向量?
答案 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
扩展为正确的长度。这很危险,特别是如果您不进行任何检查以查看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
作为参数。因此,您依靠R在全局工作空间中找到正确的b
。这不是好习惯。相反,通过参数传递函数中所需的所有对象,就像我在我的示例中所做的那样。如果您这样做,您会发现错误更容易追踪等。