Это в основном вопрос, который задают здесь (не мной), но я упростил пример и просто не могу понять, что происходит, поэтому я решил изложить егоснова таким образом, чтобы получить больше ответов.
Взять данные dd
:
dd <- structure(list(first = c("118751", "55627", NA), one = c(41006L,
119098L, 109437L), two = c(118751L, 109016L, 109831L), three = c(122631L,
104639L, 120634L), four = c(38017L, 118950L, 105440L), five = c(114826L,
122047L, 124347L), six = c(109438L, 55627L, 118679L), seven = c(27094L,
107044L, 122161L), eight = c(112473L, 116909L, 124363L), nine = c(120586L,
114711L, 120509L)), row.names = c(NA, 3L), class = "data.frame")
dd
first one two three four five six seven eight nine
1 118751 41006 118751 122631 38017 114826 109438 27094 112473 120586
2 55627 119098 109016 104639 118950 122047 55627 107044 116909 114711
3 <NA> 109437 109831 120634 105440 124347 118679 122161 124363 120509
Теперь мы хотим найти строки, в которых число в столбце first
равно числув столбце six
(который является седьмым столбцом в кадре данных), используя apply
:
apply(dd,1,function(x) as.integer(x["first"])==x[7])
1 2 3
FALSE FALSE NA
Этот результат явно ложный - 2 должно было дать TRUE.Как ни странно, если я запускаю ту же вещь ТОЛЬКО во втором ряду, я получаю правильный ответ:
apply(dd[2,],1,function(x) as.integer(x["first"])==x[7])
2
TRUE
Я также пробовал другие подмножества - 1: 2, 2: 3 и даже c (1,3).Последний дает мне ожидаемый результат, в то время как первые два продолжают настаивать на FALSE для строки 2.
Если я опускаю apply
, я получаю правильный ответ (независимо от подмножества):
as.integer(dd$first)==dd$six
[1] FALSE TRUE NA
Что, черт возьми, происходит?