我需要向上/向下或向左/向右移动图像(我已存储为矩阵),我希望它保持在原始矩阵尺寸的范围内。
举一个例子,如果我有一个3x3矩阵
x <- matrix(seq(1,9),3,3)
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
我希望将其转移到我想要的地方
[,1] [,2] [,3]
[1,] NA NA NA
[1,] 1 4 7
[2,] 2 5 8
有人可以帮我这个吗?我也希望能够为左/右翻译执行此操作
答案 0 :(得分:2)
创建了一个处理&#39; left&#39;,&#39; right&#39;,&#39; up&#39;,&#39; down&#39;的功能。
f1 <- function(mat, dir, n=1){
if(dir %in% c('up', 'down')){
stopifnot(nrow(mat)> n)
i1 <- rep(NA, ncol(mat))
if(dir=='down'){
r1 <- `dimnames<-`(do.call(rbind, c(replicate(n, i1, simplify=FALSE),
list(head(mat, -n)))), NULL)
}
else {
r1 <- `dimnames<-`(do.call(rbind, c(list(tail(mat, -n)),
replicate(n, i1, simplify=FALSE))), NULL)
}
}
else {
stopifnot(ncol(mat) > n)
i2 <- rep(NA, nrow(mat))
if(dir=='right'){
r1 <- `dimnames<-`(do.call(cbind, c(replicate(n, i2, simplify=FALSE),
list(mat[, head(1:ncol(mat),-n)]))), NULL)
}
else {
r1 <- `dimnames<-`(do.call(cbind, c(list(mat[,tail(1:ncol(mat), -n)]),
replicate(n, i2, simplify=FALSE))), NULL)
}
}
r1
}
检查不同的&#39; n&#39;和方向。
f1(x, 'up', 2)
# [,1] [,2] [,3]
#[1,] 3 6 9
#[2,] NA NA NA
#[3,] NA NA NA
f1(x, 'down',2)
# [,1] [,2] [,3]
#[1,] NA NA NA
#[2,] NA NA NA
#[3,] 1 4 7
f1(x, 'left',1)
# [,1] [,2] [,3]
#[1,] 4 7 NA
#[2,] 5 8 NA
#[3,] 6 9 NA
f1(x, 'right',1)
# [,1] [,2] [,3]
#[1,] NA 1 4
#[2,] NA 2 5
#[3,] NA 3 6
f1(x, 'right',3)
#Error: ncol(mat) > n is not TRUE
f1(x, 'up',3)
#Error: nrow(mat) > n is not TRUE