访问*内的索引

时间:2017-06-18 00:45:55

标签: r loops apply

我有两个容器contycontx。两者的价值相互关联。在conty[1]上使用apply时,contx[1]contx等有关我想访问应用结构中的索引,因此我可以将conty中相应元素的值放入{{ 1}}取决于contz的索引。

x

我可以在lapply(contx, function(x) { if (x==1) append(contz,conty[xindex]) }) 循环中轻松完成此操作但是每个人都坚持使用apply更好。我试图寻找例子,但我唯一能找到的东西主要是用于生成地图的东西,在那里我并不完全清楚我是如何适应我的问题的。

1 个答案:

答案 0 :(得分:0)

这里有一些问题。

  1. “每个人都坚持认为使用申请更好”。对不起,但他们错了;它不是必然更好。看到老派Burns Inferno(“如果你正在使用R,你认为你在地狱,这是你的地图”),第4章(“Overvectorization”):
  2.   

    常见的反射是使用apply系列中的函数。这不是矢量化,而是循环隐藏。 apply函数在其定义中有一个for循环。 lapply函数掩盖了循环,但执行时间往往大致等于显式for循环...基于您在Uwe的Maxim上使用apply函数的决定(第20页)。问题在于人的时间而不是芯片时间。通过花费更长的时间来编写代码可以浪费人的时间,并且(通常更重要的是)花费更多的时间来理解它的作用。

    然而,你正在做的事情是增长一个对象(也包含在 Inferno 中)。假设在你的示例中contz作为一个空列表开始,这应该有用(我的例子反映了你的用例?)

    x <- c(1,2,3,1)
    conty <- list("a","b","c","d")
    contz <- conty[which(x==1)]
    

    或者,如果要在函数中使用两者值和索引,可以编写双变量函数f(val,index),然后使用Map(f,my_list,seq_along(my_list))