首页 > 解决方案 > 外部返回多个错误?

问题描述

好的,所以我有一些行数和 44 列的数据框。

为了制作热图,我正在尝试创建一个 5 x 44 的矩阵。

x = seq(1,5,1)
y = seq(1,44,1)
f = function(x, y) { r = mean(r01[r01$weekday == x,y]); r}
z = outer(x, y, f)

这就是我一直在尝试的方式,但是我遇到了一些错误:

Error in dim(robj) <- c(dX, dY) : 
  dims [product 220] do not match the length of object [1]
In addition: Warning messages:
1: In r01$weekday == p :
  longer object length is not a multiple of shorter object length
2: In mean.default(r01[r01$weekday == p, q]) :
  argument is not numeric or logical: returning NA

因此,在尝试消除这些错误时,我尝试了以下方法:

x = seq(1,5,1)
y = seq(1,44,1)
f = function(x,y){ r = x+y; r+1 }
z = outer(x, y, f)

哪个有效。现在这个,它兼作我可重现的例子

hugs<-data.frame(replicate(44,sample(1:5,1000,rep=TRUE)))
x = seq(1,5,1)
y = seq(1,44,1)
f = function(x, y) { r = mean(hugs[hugs$x1 == x,y]); r}
z = outer(x, y, f)

失败,错误大致相同:

Error in dim(robj) <- c(dX, dY) : 
  dims [product 220] do not match the length of object [1]
In addition: Warning message:
In mean.default(hugs[hugs$X1 == x, y]) :
  argument is not numeric or logical: returning NA

这让我很困惑,因为我认为如果上面的那个会起作用。所以我不知道如何调和一个有效的和不有效的。

我通过在运行其余部分之前使用以下修改拥抱来复制“拥抱”版本中缺少的错误:

hugs$X1[hugs$X1 == 1,] <- 3

但我实际上不知道如何解决该错误,因为我的原始数据框在工作日的值是 1:5,并且像我的示例一样有 44 列,所以我一定是误解了它的来源。并不是说手段不存在:

for (i in x){
  for (j in y){
    print(mean(r01[r01$weekday == i,j]))}}

返回每一个的值。我想我可以重构我的上层逻辑以仅使用这两个循环,但我想使用外部,因为它更有效(?)。

标签: rfunctionmatrix

解决方案


感谢评论,我决定不使用外层,而是使用这个同样快速和简单的单行:

aggregate(r01[1:44], r01["weekday"], mean)

推荐阅读