Как избежать особого случая, когда список имеет длину 1?

R, похоже, превращает список длины 1 в скаляр.

Например:

d=1:3
a=1
b=2
remains = d[c(-a, -b)]
sample(remains, 6, replace=TRUE)

Это работает неправильно, потому что sample() рассматривает «остатки» как одно число, а не как список из 1 элемента. образец возвращает значения в диапазоне 1:3

если я изменю приведенный выше код так, чтобы «b = 1», тогда sample () вернется, как и ожидалось.

Как исправить этот код без добавления специального случая для length(remains)==1 ?


person joeking    schedule 22.01.2018    source источник
comment
R не имеет скаляров remains в вашем коде, это вектор длины 1.   -  person John Coleman    schedule 22.01.2018
comment
Возможно, но проблема та же. образец (N) ведет себя по-разному, когда длина (N) == 1 против длины (N) › 1   -  person joeking    schedule 22.01.2018
comment
В дополнение к отмеченному дубликату, r.789695.n4.nabble.com/ предлагает многие из тех же решений.   -  person josliber♦    schedule 22.01.2018
comment
Также взгляните на ?sample; есть комментарий (и пример, представляющий более безопасную функцию resample), который касается вашей проблемы.   -  person Maurits Evers    schedule 22.01.2018