[英]Selecting and then replacing an element of a matrix in 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),這完全讓我失望了。 最后兩行代碼是我嘗試不同的事情,這些事情都不符合我的想法。
在隨機替換中,我認為它可以使用索引編制或抽樣,但是我對索引編制的知識很低。 而且,我在網上看到的內容似乎通常基於替換某些元素(例如用其他東西替換所有“ a”)或對其進行某種變體,而不是在矩陣中選擇單個隨機元素。采樣方式相同(但能夠替換該元素)。
最終,我需要3件事(我認為很簡單):
任何幫助將不勝感激,盡管它似乎相對毫無意義,但它是某些編程的核心概念,我將不得不在整個夏天進行,而我確實非常希望能夠做並了解正在發生的事情,以確保實際上,我可以執行我承諾的項目。
另外,我還沒有研究循環部分,因此任何指導都將是很棒的。
非常感謝
首先:您需要一個character
矩陣,所以不要使用factor
s。 只需定義:
bob.a<-letters[1:5]
或通過bob.a<-as.character(bob.a)
對其進行轉換bob.a<-as.character(bob.a)
如果已存在)。 bob.matrix
創建bob.matrix
可以了。 只是不要使用byrow=TRUE
:這是它的目的,因為該元素是隨機的? 如果要替換bob.matrix
的隨機元素, bob.matrix
嘗試:
bob.matrix[sample(length(bob.matrix),1)]<-sample(bob.a,1)
好的,這是一個簡單的希望是不言自明的代碼:
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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.