索引函数调用

Indexing a function call

我正在做一个欺骗游戏,我正在尝试用 R 进行模拟。 我有一个长度为 n 的随机向量 A。我想要一个功能。对于 eg-extract 这样用户第一次使用 extract() 时,他得到 A[1],第二次他得到 A[2] 直到 A[n]。我知道如果我可以在提取函数中为 i 提供参数会容易得多,但我不想给人留下我们正在记录用户操作的印象。

我的尝试

j<-1

extract<-function(){
  B<-numeric(n)
  x<-sample(c(1:6),1)
  B[i]<-j
  j<-j+1
  return(x)
}

然后调用B得到结果向量 但它不起作用

您可以创建一个环境来记录索引变量 i 和您的值向量 A。然后,每次调用 extract 时,您都可以拉取当前索引 i,在环境中更新该索引,并 return A 的适当值。此过程称为 "side effect",因为调用 extract() 执行的操作会修改工作区中的值,而不是函数的 return 值。这在 R 中也是一种不太常见的方法,因为该函数对工作区中未显式传递给 extract.

的对象执行操作
e <- new.env()
e$i <- 1
e$A <- 1:15

extract <- function() {
    x <- e$A[e$i]
    e$i <<- e$i + 1
    return(x)
}

extract()
# [1] 1
extract()
# [1] 2
extract()
# [1] 3
extract()
# [1] 4
extract()
# [1] 5

一旦到达 A 向量的末尾,您可能想要引入一个 if 语句来更改 extract 的行为。