2017-08-09 63 views
1

是否有可能在沒有循環的情況下運行以下代碼(最好是lapply)?使用列表的元素來索引/子集中的其他列表

vec1=c(.1,.2,.3,.4,.5) 
vec2=c(2,4,6,8,10) 

vec3<-c(1,5) 
vec4<-c(2,4) 

lijst<-list(vec1,vec2) 
lijst2<-list(vec3,vec4) 

for (i in 1:2) { 
print(lijst[[i]][lijst2[[i]]]) 
} 

這是一個更大的算法的一部分,我需要優化以減少計算時間。

**編輯**

最後,我想設置在lijst2零指示的元素,所以最終的解決方案應該是下面的列表:

[[1]] 
[1] 0 0.2 0.3 0.4 0 

[[2]] 
[1] 2 0 6 0 10 
+1

'lapply(1:2,function(i)print(lijst [[i]] [lijst2 [[i]]]))' – CPak

+0

您是否需要將其他原因放入列表中?否則,您可以運行'vec1 [vec3]'和'vec2 [vec4]'來獲得相同的結果。 –

+0

謝謝你的快速回復,我編輯了我的原始帖子,以表明我的最終目標是什麼。 – dirkpelt

回答

1

這應該給預期輸出:

mapply(function(x,y) {x[y]=0;x},x=lijst,y=lijst2,SIMPLIFY=FALSE) 

輸出:

[[1]] 
[1] 0.0 0.2 0.3 0.4 0.0 

[[2]] 
[1] 2 0 6 0 10 
+0

謝謝,但我需要從列表開始。 'vec'語句只是爲了提供可重複的代碼。正如我所提到的,這是一個更大的算法的一部分,它被設置爲一個列表。 – dirkpelt

+0

對不起,我不明白。你可以用mapply來實現,看到我更新的答案。希望這可以幫助! – Florian

+0

非常感謝你! – dirkpelt

相關問題