为什么我使用sample()函数来填充一个变量,而不是重新生成上述变量
问题描述:
最初,这篇文章是关于使用多余的随机性并在名为list_14300的矩阵中寻找一个模式(最大频率)。然后,编程的另一个方面开始打扰我,每次我运行A)下面的代码。然后关闭R并重新启动R,并运行用户定义的函数estimate_mode的相同代码,从而得到相同的输出。这很烦人,我期待每次都有不同的输出。这是否与退出之前不保存有关?如果是这样,那意味着每次输出都不是随机的。为什么我使用sample()函数来填充一个变量,而不是重新生成上述变量
这里是一个函数I#1发现,找到一个矢量的模式或基质:
estimate_mode <- function(x) {
d <- density(x)
d$x[which.max(d$y)]
}
下面我创建一个1430×10矩阵(list_14300),然后用上述功能,确定哪个值在该矩阵中(在1:1430之间)出现在具有14300个值的矩阵中的大部分频率上。 A)
A)。
list_14300<-replicate(10,sample(1:1430,1430,replace = TRUE))
estimate_mode(list_14300)
我每次运行下面的代码,并关闭R程序,然后重新打开R和然后运行相同的代码,为什么我得到的结果相同。我期望随机抽样,从而得出不同的结果。这是我运行:
list_14300<-replicate(10,sample(1:1430,1430,replace = TRUE))
#### MODE
estimate_mode(list_14300)
#
list_14300[1430,]
min(list_14300[1430,])
max(list_14300[1430,])
list_14300[1430,1]
#
而且每次我关闭并重新打开R和运行这个结果上面的代码中再次给出:
> list_14300<-replicate(10,sample(1:1430,1430,replace = TRUE))
> #### MODE
> estimate_mode(list_14300)
[1] 459.4862
> #
>
> list_14300[1430,]
[1] 1011 369 841 1383 82 1317 768 343 998 1203
> min(list_14300[1430,])
[1] 82
> max(list_14300[1430,])
[1] 1383
> list_14300[1430,1]
[1] 1011
见鬼,为什么不构成对结果DISTINCT EACH时间,我期待吗?
答
在我发布我的答案后,您似乎已经相当大地改变了问题的范围,答案是针对您发布的最初问题。
如果我理解正确的话,那么你就可以创建其中每个元素维度的矩阵1430×10的列表:
a <- list()
for(i in 1:100) {a[[i]] <- replicate(10, sample(1:1430, 1430), replace = TRUE))}
您可以检查第二矩阵例如是这样的:
a[[2]]
然后找哪个号码最常发生在每一个矩阵,我们写这个函数:
GetMax <- function(x){
counts <- table(x)
counts_max <- as.numeric(names(counts[which.max(counts)]))
return(counts_max)
}
然后,我们可以应用到所有100个矩阵:
lapply(a, GetMax)
你可以得到,而不是在一个向量的结果,并绘制柱状图:
most_freq <- unlist(lapply(a, GetMax))
hist(most_freq)
是什么'list_1430'?你在'list_14300'的定义中将它称为'length()'的参数 – dimebucker91
你的'list_14300'定义将不会运行,因为它取决于'list_1430'(错字?这也应该是'list_14300'?)没有定义。另外,我建议不要用'list'命名一个'matrix',因为'list'有些不同。 – Gregor
但一般来说,'apply'对于矩阵非常适用。 'apply(your_matrix,MARGIN = 1,estimate_mode)'将'estimate_mode'函数应用到矩阵的每一行。改为使用'MARGIN = 2'。 – Gregor