R 用于在圆形块(列)中查找邻居(左侧和右侧)的关联矩阵
考虑一个矩阵,它有R 用于在圆形块(列)中查找邻居(左侧和右侧)的关联矩阵,r,R,考虑一个矩阵,它有r行和c列,并且包含v0到v-1之间的整数;在下面的示例中,r=4、c=2和v=6 L <- c(0,1,1,2,0,1,2,3) (x <- matrix(L,nrow=4,ncol=2,byrow = TRUE)) ## 0 1 ## 1 2 ## 0 1 ## 2 3 下一个元素(x[2,1])两侧(上方和下方)都有0,因此第一列(对应于0)被设置为2,其余元素等于零 [2] 2 0 0 0 0 0 上述示例的完整
r
行和c
列,并且包含v
0到v-1之间的整数;在下面的示例中,r=4
、c=2
和v=6
L <- c(0,1,1,2,0,1,2,3)
(x <- matrix(L,nrow=4,ncol=2,byrow = TRUE))
## 0 1
## 1 2
## 0 1
## 2 3
下一个元素(x[2,1]
)两侧(上方和下方)都有0
,因此第一列(对应于0)被设置为2,其余元素等于零
[2] 2 0 0 0 0 0
上述示例的完整矩阵为:
rownames 0 1 2 3 4 5
[1] 0 1 1 0 0 0
[2] 2 0 0 0 0 0
[3] 0 1 1 0 0 0
[4] 2 0 0 0 0 0
[5] 0 0 1 1 0 0
[6] 0 2 0 0 0 0
[7] 0 0 1 1 0 0
[8] 0 2 0 0 0 0
行和各为2
L =c(0,1,1,2,0,1,2,3)
x=matrix(L,nrow=4,ncol=2,byrow = TRUE)
有一种更干净的方法可以做到这一点:
wrapind <- function(i,n)
ifelse((r <- i %% n) == 0, n, r)
n <- nrow(x)
v <- 6
incmat <- matrix(0,ncol=v,nrow=prod(dim(x)),
dimnames=list(NULL,0:(v-1)))
k <- 1
for (i in seq(ncol(x)))
for (j in seq(nrow(x))) {
cat(i,j,k,"\n") ## unnecessary
tt <- table(as.character(x[wrapind(c(j-1,j+1),n),i]))
incmat[k,names(tt)] <- tt
k <- k+1
}
wrapind看起来像家庭作业!你试过什么?这里的人不会为你写代码吗?你必须自己尝试一下,然后告诉我们你在尝试中付出了什么努力solution@geektrader. 我已经搜索并尝试了,但是找不到相关的东西。@user1855677我主要看到你回答了这样的问题。请帮助我,我不明白为什么这是一个如此糟糕的问题。当然,有些地方化了,没有显示出太多研究成果的证据(但应该倾向于否决,而不是结束),但所需的技术似乎相当普遍——而且它似乎太奇怪/晦涩,不可能是一个家庭作业问题(更多的背景不会造成伤害)。我有一个解决方案,虽然我不明白为什么结果会有12行而不是8行(也就是说,它的行数应该等于矩阵元素的总数,对吧?)——也许这是以前版本的遗留问题?@BenBolker非常感谢您的赞赏和宝贵的评论。是的,您认为行数等于元素数(8)是正确的。为了得到答案,我可以再问一遍吗?现在的问题是矩阵“x”通过一个循环。在每次迭代中,矩阵“x”都会发生变化。上述给定的关联矩阵函数影响生成的矩阵。我无法理解建议的函数如何更改已存在并在函数中使用的矩阵行?这些代码用于为(I in 1:t){v=((2*I)+1)h=seq(from=0,to=I,by=1)q1=NULL q3=NULL x=NULL for(j in 1:i){q1=c((v-(4*h[j]+1)))q3=c((4*h[j]+3))T=c(q1,q3)y=c(0)IB=T(c(y,cumsum(T)%%v))l=NULL for(i in 1:k)for(j in 0:(v-1)){l=c(l,rep((IB i]+j+v)%%v))}x1 x1=矩阵(c(l),nrow=k,ncol=v,byrow=TRUE)x=cbind,x1)}}
wrapind <- function(i,n)
ifelse((r <- i %% n) == 0, n, r)
n <- nrow(x)
v <- 6
incmat <- matrix(0,ncol=v,nrow=prod(dim(x)),
dimnames=list(NULL,0:(v-1)))
k <- 1
for (i in seq(ncol(x)))
for (j in seq(nrow(x))) {
cat(i,j,k,"\n") ## unnecessary
tt <- table(as.character(x[wrapind(c(j-1,j+1),n),i]))
incmat[k,names(tt)] <- tt
k <- k+1
}