【问题标题】:Outer returning multiple errors?外部返回多个错误?
【发布时间】:2018-10-23 18:40:49
【问题描述】:

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

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

【问题讨论】:

  • 学到了一些东西并解决了我的问题!谢谢:D

标签: r function matrix


【解决方案1】:

感谢 cmets,我决定不使用外层,而是使用这种同样快速和简单的单层:

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

【讨论】:

    猜你喜欢
    • 2012-03-07
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 2013-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    相关资源
    最近更新 更多