外部返回多个错误?

时间:2018-10-23 18:40:49

标签: r function matrix

好的,所以我有一个行数和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]))}}

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

1 个答案:

答案 0 :(得分:1)

多亏了这些评论,我决定不使用外部,而是使用了同样快速而简单的一个衬里:

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