Отбор проб в R из вектора различной длины

У меня есть вектор с переменной длиной, который иногда может иметь длину 1.

Я хотел бы пробовать из этого вектора такой, что если его длина равна 1, она всегда производит выборку из 1 числа.

Sample () не будет делать этого, потому что он отсчитывает от 1 до цифры, когда размер выборки равен 1.

Это документированная функция:

Если x имеет длину 1 , является numeric (в смысле is.numeric ) и x >= 1 , выборка через образец происходит из 1:x . Обратите внимание, что эта удобная функция может привести к нежелательному поведению, когда x имеет разную длину в вызовах, таких как sample(x) .

Альтернативой является написать свою собственную функцию, чтобы избежать этой функции:

 sample.vec <- function(x, ...) x[sample(length(x), ...)] sample.vec(10) # [1] 10 sample.vec(10, 3, replace = TRUE) # [1] 10 10 10 

Некоторые функции с аналогичным поведением перечислены в разделе seq vs seq_along. Когда использование seq приведет к непреднамеренным результатам?

При подаче только одного единственного числа sample работает как sample.int (см. ?sample ). Если вы хотите убедиться, что это только образцы из вектора, который вы ему даете, вы можете работать с индексами и использовать эту конструкцию:

 x[sample(length(x))] 

Это дает правильный результат независимо от длины x и без необходимости добавлять if -condition, проверяя длину.

Пример:

 mylist <- list( a = 5, b = c(2,4), d = integer(0) ) mysample <- lapply(mylist,function(x) x[sample(length(x))]) > mysample $a [1] 5 $b [1] 2 4 $d integer(0) 

Примечание: вы можете заменить sample на sample.int чтобы получить небольшое увеличение скорости.

  • Последовательные / подвижные суммы в векторе в R
  • Почему используется `<< -` нахмурился и как я могу его избежать?
  • R: преобразовать строку с разделителями в переменные
  • Как подсчитать количество уникальных значений по группе?
  • Ускорение производительности write.table
  • Найти ближайшее значение в векторе с бинарным поиском
  • Как автоматически включить все двухсторонние взаимодействия в модели glm в R
  • Преобразовать значения в столбце в имена строк в существующем кадре данных в R
  • Как изменить языковые настройки в R
  • Подавить вывод одной команды в R
  • Почему некоторые символы Юникода отображаются в matrixх, но не в кадрах данных в R?
  • Давайте будем гением компьютера.