2016-08-20 3 views
1

Если у меня есть массивКак я могу применить к массиву и скаляру?

a = c(1,2,3,1,2,3,1,2,3,1,2,3) 

Я хотел бы применить функцию «которая» для каждого скаляра в соотношении 1: 3

l = list() 
for(i in 1:3){ 
l[[i]] = which(a == i) 
} 

как я векторизации эту операцию с примениться, lapply, Карта?

+1

Вы ищете для чего-то более общего или для упрощения этого конкретного примера? Вы могли бы предоставить больше контекста или попробовать «split (seq_along (a), a)», соответственно –

ответ

2

Главный аргумент lapply должен быть размером элементов списка, в котором вы хотите закончить. Который является то, что вы цикл над вашей for например, так:

a = c(1,2,3,1,2,3,1,2,3,1,2,3) 
lapply(1:3, function(x) which(a == x)) 

В качестве альтернативы, если вы не хотите, чтобы закодировать a в анонимной функции вы можете использовать:

lapply(1:3, function(x, y) which(y == x), y = a) 
+1

, второй - это то, что я искал, я не знаю, как «не применять» функцию по элементу «a» по элементу. Я не думал о дополнительных аргументах. спасибо – Sojers

Смежные вопросы