如何在r中转换函数的对象?

马可·帕斯托尔·梅奥

我想创建一个转换其对象的函数。

我试图像往常一样转换变量,但在函数内。

这有效:

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
G.格洛腾迪克

R 是有功能的,所以通常会返回输出。如果要更改输入变量的值以采用输出值,则通常由调用者完成,而不是在函数内完成。func从问题中使用它通常是这样完成的:

vec <- func(vec)

此外,虽然您可以覆盖变量,但通常这不是一个好主意。它使调试变得困难。vec输入还是输出的当前值,如果是输出,输入的值是多少?我们不知道,因为我们已经覆盖了它。

func_overwrite

也就是说,如果你真的想这样做,尽管有上面的评论,那么:

# 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

另一条评论。不要T用于真。总是写出来。TRUE是 R 中的保留名称,但T它是有效的变量名称,因此可能会导致难以找到错误,例如当有人使用T温度时。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章