[英]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.