2016-09-30 63 views
0

最初,这篇文章是关于使用多余的随机性并在名为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时间,我期待吗?

+0

是什么'list_1430'?你在'list_14300'的定义中将它称为'length()'的参数 – dimebucker91

+0

你的'list_14300'定义将不会运行,因为它取决于'list_1430'(错字?这也应该是'list_14300'?)没有定义。另外,我建议不要用'list'命名一个'matrix',因为'list'有些不同。 – Gregor

+0

但一般来说,'apply'对于矩阵非常适用。 'apply(your_matrix,MARGIN = 1,estimate_mode)'将'estimate_mode'函数应用到矩阵的每一行。改为使用'MARGIN = 2'。 – Gregor

回答

0

在我发布我的答案后,您似乎已经相当大地改变了问题的范围,答案是针对您发布的最初问题。

如果我理解正确的话,那么你就可以创建其中每个元素维度的矩阵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) 
相关问题