Как использовать lapply с функцией, для которой в качестве аргумента требуется вектор - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь найти, где в списке векторов у меня есть 3 или 1, но я понятия не имею, как это сделать с lapply, если используемая функция требует вектор в качестве аргумента. Пример:

1002 *k <- list(c(2,0,2,1),c(3,0,2,0),c(0,1,2,0)) lapply(k,match(c(1,3),k)) # The problem is here

Ответы [ 2 ]

1 голос
/ 21 октября 2019

Ответ @Samuel Diebolt использует анонимный вызов функции в lapply. Чтобы использовать его без анонимного вызова, синтаксис будет

lapply(k, match, x = c(1, 3))

#[[1]]
#[1]  4 NA

#[[2]]
#[1] NA  1

#[[3]]
#[1]  2 NA
1 голос
/ 21 октября 2019

lapply принимает list в качестве первого аргумента и функцию в качестве второго. Необязательные аргументы для функции могут быть добавлены в качестве дополнительных аргументов к lapply.

Используя match(c(1,3), k), вы звоните match на c(1, 3) и ваш список k. Что вы хотите сделать, это передать функцию lapply, которая примет вектор x в качестве аргумента и вернет match(c(1, 3), x). lapply выполнит эту функцию для каждого элемента вашего списка k.

Вот как вы должны использовать lapply:

k <- list(c(2,0,2,1),c(3,0,2,0),c(0,1,2,0))
lapply(k, function(x) match(c(1,3), x))
# [[1]]
# [1]  4 NA
#
# [[2]]
# [1] NA  1
#
# [[3]]
# [1]  2 NA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...