我有两个容器conty
和contx
。两者的价值相互关联。在conty[1]
上使用apply时,contx[1]
与contx
等有关我想访问应用结构中的索引,因此我可以将conty
中相应元素的值放入{{ 1}}取决于contz
的索引。
x
我可以在lapply(contx, function(x) {
if (x==1) append(contz,conty[xindex])
})
循环中轻松完成此操作但是每个人都坚持使用apply更好。我试图寻找例子,但我唯一能找到的东西主要是用于生成地图的东西,在那里我并不完全清楚我是如何适应我的问题的。
答案 0 :(得分:0)
这里有一些问题。
常见的反射是使用
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))