我想创建一个转换其对象的函数。
我试图像往常一样转换变量,但在函数内。
这有效:
vec <- c(1, 2, 3, 3)
vec <- (-1*vec)+1+max(vec, na.rm = T)
[1] 3 2 1 1
这不起作用:
vec <- c(1, 2, 3, 3)
func <- function(x){
x <- (-1*x)+1+max(x, na.rm = T))
}
func(vec)
vec
[1] 1 2 3 3
R 是有功能的,所以通常会返回输出。如果要更改输入变量的值以采用输出值,则通常由调用者完成,而不是在函数内完成。func
从问题中使用它通常是这样完成的:
vec <- func(vec)
此外,虽然您可以覆盖变量,但通常这不是一个好主意。它使调试变得困难。是vec
输入还是输出的当前值,如果是输出,输入的值是多少?我们不知道,因为我们已经覆盖了它。
也就是说,如果你真的想这样做,尽管有上面的评论,那么:
# works but not recommended
func_overwrite <- function(x) eval.parent(substitute({
x <- (-1*x)+1+max(x, na.rm = TRUE)
}))
# test
v <- c(1, 2, 3, 3)
func_overwrite(v)
v
## [1] 3 2 1 1
尽管 R 具有函数性质,但它实际上确实提供了一种覆盖功能,尽管问题中的函数并不是真正适合它的候选者,因此让我们更改示例以提供一个incr
将输入变量增加给定值的函数。也就是说,它这样做:
x <- x + b
我们可以在 R 中将其写为:
`incr<-` <- function(x, value) x + value
# test
xx <- 3
incr(xx) <- 10
xx
## [1] 13
另一条评论。不要T
用于真。总是写出来。TRUE
是 R 中的保留名称,但T
它是有效的变量名称,因此可能会导致难以找到错误,例如当有人使用T
温度时。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句