WedX - журнал о программировании и компьютерных науках

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

Чрезвычайно новичок, и вся концепция случайного выполнения действий в R - это то, что мне еще не удалось понять.

Мой код ниже - это начало моей попытки создать матрицу, состоящую из случайного распределения букв a - e (с заменой и т. д.), которая является моим вектором "bob.a". Затем мне нужно выбрать случайный элемент из этой матрицы и заменить его другим образцом «bob.a» (то есть другой случайной буквой, даже если эта буква заканчивается одинаково). В идеале я бы пропустил это через цикл примерно 100 раз, пока каждый элемент не будет заменен случайным образом (хотя то, что каждый элемент заменен, не имеет значения по сравнению с общей схемой, заключающейся в том, чтобы просто убедиться, что я случайным образом заменяю элементы 100 раз).

Мой код:

##Create Bob Vector
bob.a<-factor(c(letters[1:5]))
##Check Bob Vector
bob.a


#Matrix creation (Random)
bob.matrix<- matrix(sample(bob.a,25,replace=TRUE),
                      nrow=5,
                      ncol=5,
                      byrow = TRUE)
##Check bobmatrix.v2
bob.matrix


##Random removal (&replace?)
bob.matrix[2,3] <- sample(bob.a,1,replace=TRUE)

sample(bob.matrix,1)

bob.matrix[,] <- sample(bob.a,1,replace=TRUE)

sample(bob.matrix,1) <- sample(bob.a,1,replace=TRUE)

(Я делаю все очень просто и проверяю каждый шаг, потому что мне очень нужно понять основные концепции того, что я делаю!)

Хотя я уверен, что ответ будет включать выборку и, возможно, индекс, просто делать это случайным образом сейчас совершенно невозможно.

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

bobmatrix.v2[2,3] <- sample(bob.a,1,replace=TRUE)

Вставляет числовое значение для текста (например, заменяет позицию [2,3] на 1 вместо a), что меня полностью сбило с толку. В последних двух строках кода я пробую разные вещи, которые не работают для того, о чем я думал.

Я думал, что при случайной замене может использоваться либо индексация, либо выборка, но мои знания об индексации довольно низкие. И то, что я видел в Интернете, часто основано на замене определенных элементов (например, всех «а» чем-то другим) или некоторых вариациях этого вместо выбора одного случайного элемента в матрице, в так же, как и образец (но с возможностью замены этого элемента).

В конечном итоге мне нужно 3 (что я считал простыми) вещи:

  1. Выберите случайный элемент/позицию в матрице
  2. Выберите случайную букву из вектора "sample(bob.a,1)
  3. Замените 1 на 2 (случайный элемент/позиция со случайной буквой из вектора).

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

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

Огромное спасибо

14.04.2016

  • sample(bob.matrix,1) <- sample(bob.a,1,replace=TRUE) не сработает - вы пытаетесь присвоить значение выходу примера. 14.04.2016

Ответы:


1

Во-первых: вам нужна матрица character, поэтому не используйте factors. Просто определите:

bob.a<-letters[1:5]

или конвертировать его через bob.a<-as.character(bob.a) если он уже есть. bob.matrix в порядке, поскольку он создан. Только не используйте byrow=TRUE: в чем его цель, так как элемент случайный? Если вы хотите заменить случайный элемент bob.matrix, просто попробуйте:

bob.matrix[sample(length(bob.matrix),1)]<-sample(bob.a,1)
14.04.2016
  • Благодарю вас! Работал отлично. Это именно та простая вещь, которую я считал возможной, но я просто не мог уложить ее в голове. Итак, просто чтобы запросить слишком много деталей (если вы согласны с этим), местоположение «bob.matrix» выбирается, просто говоря, что образец — это 1 элемент из всей длины «bob.matrix» (потому что матрицы - это всего лишь двумерные векторы (?)), то просто замените их новой блестящей буквой только bob.a. Еще раз большое спасибо, теперь ухожу, чтобы узнать, как зациклить его несколько сотен раз. 14.04.2016

  • 2

    Хорошо, вот простой и, надеюсь, понятный код:

    sample.letters <- factor(c(letters[1:5]))
    sample.matrix <- matrix(sample(sample.letters,25,replace=TRUE), nrow=5, ncol=5, byrow = TRUE)
    
    random.row <- sample(1:nrow(sample.matrix),1)
    random.col <- sample(1:ncol(sample.matrix),1)
    
    sample.matrix.2 <- sample.matrix
    sample.matrix.2[random.row, random.col] <- as.character(sample(sample.letters,1))
    
    #before
    sample.matrix
    # what's changed?
    paste("changed: ",random.row,",",random.col)
    #after
    sample.matrix.2
    

    который производит

    > #before
    > sample.matrix
         [,1] [,2] [,3] [,4] [,5]
    [1,] "c"  "d"  "b"  "b"  "e" 
    [2,] "a"  "b"  "d"  "a"  "b" 
    [3,] "c"  "d"  "d"  "a"  "c" 
    [4,] "c"  "d"  "e"  "d"  "b" 
    [5,] "a"  "d"  "d"  "a"  "c" 
    > # what's changed?
    > paste("changed: ",random.row,",",random.col)
    [1] "changed:  1 , 3"
    > #after
    > sample.matrix.2
         [,1] [,2] [,3] [,4] [,5]
    [1,] "c"  "d"  "a"  "b"  "e" 
    [2,] "a"  "b"  "d"  "a"  "b" 
    [3,] "c"  "d"  "d"  "a"  "c" 
    [4,] "c"  "d"  "e"  "d"  "b" 
    [5,] "a"  "d"  "d"  "a"  "c" 
    

    Ваша проблема с назначением заключается в том, что вы используете factor, поэтому следующее:

    sample(sample.letters,1)
    

    возвращает фактор как int, поэтому, если вы действительно хотите, чтобы фактор был как character (т.е. буква), вам нужно принудить его:

    as.character(sample(sample.letters,1))
    
    14.04.2016
  • Большое спасибо! Я видел выбор по строке и столбцу, но не понимал, как именно он работает. И да, теперь я заменил bob.a на символы, что означает, что все работает отлично. Спасибо за помощь. 14.04.2016
  • Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]