Выбор элементов из матрицы в R - неожиданное поведение - PullRequest
1 голос
/ 16 сентября 2011

У меня проблема с выбором элементов из матрицы в R. Пример следующий.

mydata <- matrix(paste(LETTERS[1:26]), nrow=104)

создает матрицу с буквами от A до Z, повторяемыми четыре раза каждая.Когда я прошу выбрать предметы с буквой "G":

mydata[mydata[,1]==c("G"),]

, я получаю четыре буквы "G", как и ожидалось.Когда я спрашиваю "G" и "H"

mydata[mydata[,1]==c("G", "H"),]

, я получаю четыре буквы "G" и четыре буквы "H", как и ожидалось.Все идет нормально.Однако, когда я спрашиваю "G", "H" и "I" ...

mydata[mydata[,1]==c("G", "H", "I"),]

, я получаю только ДВА "G", "H" и "I"s, и предупреждающее сообщение:

longer object length is not a multiple of shorter object length

, когда я ожидаю получить четыре набора "G", "H" и "I".

IЯ как-то не в порядке - кто-нибудь может указать, где я иду не так?Я потратил как минимум полчаса в поисках ответа и был в тупике.

Спасибо в ожидании!

1 Ответ

1 голос
/ 16 сентября 2011

Вам нужно использовать %in% там, где вы сейчас используете ==.

Чтобы еще больше расширить комментарии Джошуа, вы должны заметить, что ваша "успешная" попытка с "==", вероятно, не быладобиться успеха по причинам, которые вы догадались.Сначала R расширил тестовый вектор до rep (c («G», «H»), 52), а затем сравнил элементы, которые были точно выровнены с этим более длинным вектором.Только потому, что «G» и «H» были смежными и были выровнены по нечетно-четным позициям, вы получили то, что казалось разумным.Добавление дополнительной буквы испортило выравнивание «нечетный-четный», а также выбросило предупреждение.Вот почему Иисус Навин говорил о нецелочисленном результате 104/3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...