R功能故障排除:将hist()间隔计数转换为百分位频率

3zwtqj6y  于 2023-05-04  发布在  其他
关注(0)|答案(1)|浏览(114)

我正在处理一个包含1,000个模拟的大型矩阵,其中包含近10万个事件。输出是比率。如果可以的话,我想避免使用循环,因为我不知道我的计算机是否能够处理它,所以我试图构建一个函数,它使用hist()将每个模拟的比率转换为计数,然后将这些计数转换为频率。我已经能够将函数内部的步骤应用到整个矩阵中,但在如何将这些步骤应用到每个模拟并生成结果作为输出方面遇到了困难。

function <- function(my_data) {
# Create intervals
intervals <- seq(0,1, by = .01)
# Create histogram
H <- hist(
          my_data, plot = FALSE,
          breaks = intervals, 
          right = FALSE,
          na.rm = TRUE) 
# Convert 
out <- H$counts/dim(my_data)[1]
return(out)
}

percentile_freqs <- apply(x, MARGIN = 2, FUN = function)

#Error message (the same printed thousands of times)
#1: In hist.default(my_data, plot = FALSE, breaks = func_intervals,  ... :
 #argument ‘...’ is not made use of

class(percentile_freqs)
#[1] "numeric"

dim(percentile_freqs)
#NULL
goqiplq2

goqiplq21#

所以,我偶然发现了解决方案。正如用户Jean-Claude Arbaut评论的那样,我不能分配给一个关键字,尽管这个关键字不在我的原始代码中(对不起)。无论如何,我没有一个真实的的解释,但下面的代码似乎工作!

Funct <- function(my_data) {
# Create intervals
intervals <- seq(0,1, by = .01)
# Create histogram
H <- hist(
          my_data, plot = FALSE,
          breaks = intervals, 
          right = FALSE
         ) 
# Convert 
out <- H$counts/(sum(H$counts))
return(out)
}

我只做了两个改动。首先,在#Convert阶段,将devisor从dim(my_data)[1]更改为(sum(H$counts))。还删除了hist()中的na.RM参数,尽管我确信这不是必要的。

相关问题