Использование R `external` с оператором`% in% ` - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь выполнить следующую внешнюю операцию:

x <- c(1, 11)
choices <- list(1:10, 10:20)

outer(x, choices, FUN=`%in%`)

Я ожидаю следующую матрицу:

      [,1]  [,2]
[1,]  TRUE FALSE
[2,] FALSE  TRUE

, которая будет соответствовать следующим операциям:

outer(x, choices, FUN=paste, sep=" %in% ")
     [,1]           [,2]           
[1,] "1 %in% 1:10"  "1 %in% 10:20" 
[2,] "11 %in% 1:10" "11 %in% 10:20"

Но по какой-то причине я получаю:

      [,1]  [,2]
[1,] FALSE FALSE
[2,] FALSE FALSE

Что происходит?

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Другим способом, близким к ходу вашей мысли, будет использование expand.grid() для создания комбинаций, а затем Map двух столбцов с помощью функции %in%, то есть

d1 <- expand.grid(x, choices)
matrix(mapply(`%in%`, d1$Var1, d1$Var2), nrow = length(x))
#or you can use Map(`%in%`, ...) in order to keep results in a list

ИЛИ

Как @nicola предлагает, чтобы сделать вещи лучше,

d1 <- expand.grid(list(x), choices) 
mapply(%in%, d1$Var1, d1$Var2)

оба дают,

      [,1]  [,2]
[1,]  TRUE FALSE
[2,] FALSE  TRUE
0 голосов
/ 26 ноября 2018

Как указано в комментариях, аргумент table для match (функция, вызываемая %in%) не предназначен для того, чтобы быть списком (если это так, он приводится к символу).Вы должны использовать vapply:

vapply(choices,function(y) x %in% y,logical(length(x)))
#      [,1]  [,2]
#[1,]  TRUE FALSE
#[2,] FALSE  TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...