是否有任何上下文信息可用,或者是否可以使用某些xapply函数调用的FUN?
简单示例:我可以知道当前FUN调用的“数字”是什么吗?
即如果第n次调用FUN,或者列表/向量的第n个元素(假设它是同一个东西,我是初学者),可以在其代码中读取值n吗?怎么样?
感谢您提供任何帮助/信息
在他的回答中@wuber使用封闭让我刷了起来 尝试几年前我在javascript中学到的一些概念 (“javascript好的部分”现在可能已经过时了),我做了一些 基于wuber代码的小学习实验, 如果它对其他一些有背景的初学者有用 与我的相似之处是: myFunConstr <- function(startVal) {
n <- if (missing(startVal)) 0 else startVal;
function(x) {
n <<- n+1;
cat("Iteration", n, "\n");
0
}
}
sapply(1:2,myFunConstr(99))
Iteration 100
Iteration 101
[1] 0 0
sapply(1:2,myFunConstr())
Iteration 1
Iteration 2
[1] 0 0
答案 0 :(得分:0)
您可以在父级环境中更新变量,如本例所示。
n <- 0
y <- sapply(1:3, function(x) {
n <<- n+1
cat("Iteration", n, "\n")
x^2
})
输出
迭代1
迭代2
迭代3
答案 1 :(得分:0)
您可以使用list
和data.frame
个数字创建list
,为vector
添加索引。
例如:
myList = list("a", "b", "c")
cbind(1:length(myList), myList)
输出:
myList
[1,] 1 "a"
[2,] 2 "b"
[3,] 3 "c"
这将创建一个data.frame
,其中包含myList
列和索引列。
然后,您可以在任何适用于data.frame
行的函数中访问索引。
答案 2 :(得分:0)
尝试Map
或mapply
同时迭代对象x
和序列号seq_along(x)
:
x <- 2:4 # test object to iterate over
FUN <- seq_len # test function
FUN2 <- function(x, i) { print(i); FUN(x) }
result <- Map(FUN2, x, seq_along(x))