Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中使用apply_R_Matrix_Lapply_Sapply_Mapply - Fatal编程技术网

在R中使用apply

在R中使用apply,r,matrix,lapply,sapply,mapply,R,Matrix,Lapply,Sapply,Mapply,我有一个数字矩阵,我想得到每列中5个最小值元素的平均值。 我正在尝试使用可用的不同应用函数之一。但是我做不到 这是我需要应用的函数,我已经用for循环对它进行了测试,效果非常好 mean(head(sort(table[,x]),5)) 这是我尝试过的几个例子之一: a<-mapply(function(x){mean(head(sort(table[,x]),5))},table) 我也试过sapply,lapply。。。但我还没有让它工作。上网找不到任何依据 提前感谢试

我有一个数字矩阵,我想得到每列中5个最小值元素的平均值。 我正在尝试使用可用的不同应用函数之一。但是我做不到

这是我需要应用的函数,我已经用for循环对它进行了测试,效果非常好

   mean(head(sort(table[,x]),5))
这是我尝试过的几个例子之一:

   a<-mapply(function(x){mean(head(sort(table[,x]),5))},table)
我也试过sapply,lapply。。。但我还没有让它工作。上网找不到任何依据

提前感谢

试试这个:

set.seed(1)
(mat <- matrix(sample(1:12, 12), ncol = 3))
#      [,1] [,2] [,3]
# [1,]    4    2    3
# [2,]    5    7    1
# [3,]    6   10   11
# [4,]    9   12    8
n <- 2
apply(mat, 2, function(x) mean(head(sort(x), n)))
# [1] 4.5 4.5 2.0
尝试使用apply:

a<-apply(table,2,function(x){mean(head(sort(x),5))})

最简单的猜测是在这里应用,因为您希望按列应用。使用一些示例数据:

set.seed(123)
df = matrix(rnorm(100), 10, 10)
这将有助于:

apply(df, 2, function(x) mean(sort(x, decreasing = F)[1:5]))
这段代码在做什么

要应用的第一个参数是数据,在这里您称它为问题中的表。 第二个参数2表示该函数应用于每一列。行也有1,两者都有c1,2。 第三个参数是你的函数。由于这是一个非常重要的问题,因此最好在适当的位置定义它,即定义一个x函数,其中将x想象为数据帧/矩阵的一列,然后取排序的前5个元素索引[1:5]的平均值。您还可以看到如何将进一步的参数传递给函数,例如Desculation=FALSE,这当然是默认行为,但您需要5个最高值的平均值。如果缺少数据,您可能需要添加na.rm=TRUE作为mean的参数。 以下是您的输出:

> apply(df, 2, function(x) mean(sort(x, decreasing = F)[1:5]))
 [1] -0.6376458 -0.5049506 -1.1295099 -0.1233905 -0.7905504 -0.3444174 -0.5745786 -1.0836254 -0.1159064 -0.4503110
您正在寻找colMeans,使代码更加紧凑:

colMeans(head(apply(m, 2, sort),5))

applydf,2,functionx meansortx,递减=F[1:5]谢谢先生,解释得很好。我不理解第二个论点,我认为这是一个让我更麻烦的论点。
colMeans(head(apply(m, 2, sort),5))