こんにちは。realmの例外についてです。
Wordというモデルクラスのインスタンスにint 型のrandomIdというランダムな値をセットしたいのですが、

java.lang.IllegalStateException: Cannot modify managed objects outside of a write transaction. 

が起きてしまいます。なぜでしょうか。

試したこととしてはsetRandomId()にランダムではなく任意の数値を入れてみたり、他activityにて問題なく作動している値をsetするメソッド(setMeaningというメソッドを使いましたが内容は省略します。)を使うなどしましたが、その場合も同様のエラー文が出てきます。
スタックオーバーフロー上ではandroidでのこの例外処理に関する情報がなく質問致しました。

    private void setRandom() {
    mEditor.putBoolean("random", true);
    mEditor.apply();

    mRealm = Realm.getDefaultInstance();
    RealmResults<Word> realmResults = mRealm.where(Word.class).findAll();
    int realmSize = realmResults.size();
    mRealm.close();

    boolean num[] = new boolean[realmSize]; //重複判定用
    Random rand = new Random(); //ランダムな数値

    // すべての重複判定用配列をfalseにしておく
    for(int i=0; i<realmSize; i++){
        num[i] = false;
    }

    for (int i = 0; i < realmSize; ) {

        int p = rand.nextInt(realmSize);

        if(!num[p]){
            Word word = mRealm.where(Word.class).equalTo("id", i).findFirst();
            word.setRandomId(p);  //ここでクラッシュがおきる
            num[p] =true;
            i++;
            mRealm.beginTransaction();
            mRealm.copyToRealmOrUpdate(word);
            mRealm.commitTransaction();

            mRealm.close();
        }
    }
}