xapply函数,有没有办法知道当前调用的nr或一般的“上下文”信息

时间:2017-01-16 17:23:31

标签: r

是否有任何上下文信息可用,或者是否可以使用某些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

3 个答案:

答案 0 :(得分:0)

您可以在父级环境中更新变量,如本例所示。

n <- 0
y <- sapply(1:3, function(x) {
  n <<- n+1
  cat("Iteration", n, "\n")
  x^2
})

输出

  

迭代1

     

迭代2

     

迭代3

答案 1 :(得分:0)

您可以使用listdata.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)

尝试Mapmapply同时迭代对象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))