我有一些遗留的R代码:
b = t(a)
c = t(b)
这段代码有什么作用?对我来说看起来像一个蠢货。 a
是由c(1:20)
构建的向量。
编辑:关于如何做得更好的奖励积分。
答案 0 :(得分:5)
使用str
:
> str(a); str(b); str(c)
int [1:20] 1 2 3 4 5 6 7 8 9 10 ...
int [1, 1:20] 1 2 3 4 5 6 7 8 9 10 ...
int [1:20, 1] 1 2 3 4 5 6 7 8 9 10 ...
最终转置操作将向量a
发送到具有20行和1列的矩阵。相当于:
c <- as.matrix(c(1:20))
答案 1 :(得分:4)
我认为明确设置尺寸而不是双t()
更清楚:
dim(a) <- c(length(a), 1)
应该避免复制。
我在较旧的代码中看到了相当多的内容,例如,对于最小的方块,可能从以下开始:
solve(t(x) %*% x) %*% t(x) %*% y
并且,认为它将保存转置,重构为:
xt <- t(x)
solve(xt %*% x) %*% xt %*% y
如果x不一定是矩阵,
xt <- t(a)
x <- t(xt)
但是t()
s有点代码味道;
在这种情况下,您最好使用其他矩阵运算,例如solve(crossprod(x), crossprod(x,y))
,这样可以减少开销,从而获得相同的结果。