【发布时间】: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