索引函数调用
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
的行为。
我正在做一个欺骗游戏,我正在尝试用 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
的行为。