Есть ли способ увеличить два аргумента в функции lapply? Например
test <- function(pos,value){
list[pos,value]
}
data=c(1,4,32,54) #not global
lapply(X=1:length(data),test, value=data[X])#this is the idea but the code doesnt work
Результат будет list(list(1,1),list(2,4),list(3,32),list(4,54))
Другой пример:
test <- function(pos,value,value2){
list(pos,value,value2)
}
data=c(1,4,32,54) #not global
data2=c(2,6,3,21) #not global
lapply(X=1:length(data),test, value=data[X], value2=data2[X]) #this is the idea but the code doesn't work
Результат будет list(list(1,1,2),list(2,4,2),list(3,32,6),list(4,54,21))
Это тоже может помочь. Я в значительной степени пытаюсь превратить цикл for в lapply.
test <- function(pos,value,value2){
list(pos,value,value2)
}
data=c(1,4,32,54) #not global
data2=c(2,6,3,21) #not global
for(i:length(data)){
result=list(result,test(i,data[i],data2[i]))
}
Поскольку переменные не являются глобальными, я не могу использовать тестовую функцию как
test <- function(pos){
list(pos,data[pos],data2[pos])
}
Я знаю, что есть более простой способ написать этот код, чтобы добиться того же. Но я ищу способ специально увеличить две переменные или использовать увеличенное значение в аргументе. Переменные, используемые в примерах, не являются глобальными, поэтому я не могу использовать их в функции, и необходимо использовать функцию lapply. В кодах линии не работают, это просто демонстрация концепции того, что я пытаюсь сделать. Спасибо.
Редактировать
Итак, узнав о функции mapply. Я понял, что хочу создать функцию lapply, которая действует как mapply
data
? - person Sotos   schedule 04.11.2019Map
,Map(c, seq_along(data), data, data2)
- person Ronak Shah   schedule 04.11.2019c(1, 2, 3)
= вектор ... - person Sotos   schedule 04.11.2019lapply()
? Все, что можно сделать в*apply()
, можно сделать с помощью обычного цикла. Кроме того, предложение Ронака оMap(list, var1, var2, ...)
будет соответствовать вашему выводу. - person Cole   schedule 04.11.2019lapply()
- это просто скрытый цикл. Обычно это эквивалентноres<- list(); for (element in elements) {res[[element]] <- f_x(element)}
, гдеelements
- первый аргумент вlapply()
, аfx()
- вызов функции. - person Cole   schedule 04.11.2019mapply(..., simplify = F)
обычно эквивалентен, для векторовx
иy
каждый длиной 2 равенres <- list(); for (i in 1:2) {res[[i]] <- fx(x[i], y[I])}
- person Cole   schedule 04.11.2019