Сдвиг битовой строки в a для l oop в R программировании - PullRequest
0 голосов
/ 26 февраля 2020

НАЧАЛЬНАЯ НАСТРОЙКА

# turning MHID9870 into a bit string
en <- utf8ToInt("MHID9870")
en <- binary(en, mb=7)
en <- strsplit(en,"")
en <- unlist(en)
en <- as.integer(en)
en

# Separating the bit string into parts
parts <- en
x <- parts[1:19]
y <- parts[20:41]
z <- parts[21:64]

# Finding frequency of each binary bit
my_mode <- function(v){
  freq_count <- table(v)
  max_idx <- which.max(freq_count)
  m <- names(max_idx)
  return(m)
}
xyzmaj <- my_mode(c(x[9],y[11],z[11]))

ВОПРОС НАЧИНАЕТСЯ НИЖЕ:

Я создал следующее if-else и для l oop выражение

имена переменных: xyzmaj = is контрольный бит (0 или 1) между строками x, y, z my_mode = - это функция, которая принимает строку и возвращает режим строки. Переменная "x" представляет собой строку из 19-битных чисел (0 и 1)

if ( xyzmaj == my_mode(x)) {
  for(i in 1:length(x)){
    x[i+1] <- x[i]
    i <- i+1
  }
}
x

my output keeps showing up as 
000000000000000000000

Я пытаюсь заставить ее сместиться вправо, но код продолжает просто брать первое целое число и заменять его каждым целое число после.

Таким образом, в основном, если X - 010011010101001000010

Выходные данные должны быть 001001101010100100001

1 Ответ

1 голос
/ 27 февраля 2020

Предполагая, что вы получаете функцию binary() из пакета compositions, это должно работать. Я не смог полностью воссоздать ваш код, так как вы не поделились тем, как создается объект xyzmaj.

if ( xyzmaj == my_mode(x)) {
  x <- c(x[length(x)], x[1:length(x)-1])
}
x

Это обрезает последнюю запись вектора x и помещает ее как первая запись, превращая предыдущую первую запись во вторую и т. д. c.

РЕДАКТИРОВАТЬ: Некоторые пояснения, почему ваше решение для l oop не дает ожидаемого вами результата:

Так как вы меняете x в for l oop, первое значение в векторе просто распространяется во всем векторе, так как на второй итерации x[i] было установлено на 0 на первой итерации и скоро. Эта проблема может быть решена циклически, хотя х назад, а не вперед. В дополнение к этому вам все равно придется убедиться, что последняя запись используется в качестве первой записи, для которой вы должны сохранить x в отдельном объекте, прежде чем начинать изменять x. Это может выглядеть примерно так:

  old_x <- x
  for(i in length(x):2){
    x[i] <- x[i - 1]
  }
  x[1] <- old_x[length(old_x)]
  x
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...