R 从函数更新单个向量元素
R Update Single Vector Element from Function
我对R比较陌生,遇到过一个让我困惑的情况。我正在更新我预先初始化的向量中的一些值,并意识到这些值没有更新。花了几个小时尝试调试后,我来到这里。
最小的代码可以这样总结:
incr <- function(v) {
v[1] = v[1] + 1
}
vec = 0
incr(vec)
我为什么要做增量函数?我有一个向量,用于存储每种类型的自定义类别的计数,并会打开一些因素来判断要增加哪个计数器。但最终,这段代码是其核心的基本思想。
我期望的行为是 vec[1]
的值从 0 更改为 1。
但是 vec[1]
在调试器中查看时仍为 0。这是因为我没有读到的某些范围或可变性吗?
您可以使用 assign
为您选择的环境中的变量名设置一个值。在下面的函数中,默认环境是调用者的环境。
incr <- function(x, envir = parent.frame()){
xname <- deparse(substitute(x))
x[1] <- x[1] + 1L
assign(xname, x, envir = envir)
}
a <- 0L
incr(a)
a
#[1] 1
incr(a)
a
#[1] 2
我对R比较陌生,遇到过一个让我困惑的情况。我正在更新我预先初始化的向量中的一些值,并意识到这些值没有更新。花了几个小时尝试调试后,我来到这里。
最小的代码可以这样总结:
incr <- function(v) {
v[1] = v[1] + 1
}
vec = 0
incr(vec)
我为什么要做增量函数?我有一个向量,用于存储每种类型的自定义类别的计数,并会打开一些因素来判断要增加哪个计数器。但最终,这段代码是其核心的基本思想。
我期望的行为是 vec[1]
的值从 0 更改为 1。
但是 vec[1]
在调试器中查看时仍为 0。这是因为我没有读到的某些范围或可变性吗?
您可以使用 assign
为您选择的环境中的变量名设置一个值。在下面的函数中,默认环境是调用者的环境。
incr <- function(x, envir = parent.frame()){
xname <- deparse(substitute(x))
x[1] <- x[1] + 1L
assign(xname, x, envir = envir)
}
a <- 0L
incr(a)
a
#[1] 1
incr(a)
a
#[1] 2