Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 用于在圆形块(列)中查找邻居(左侧和右侧)的关联矩阵_R - Fatal编程技术网

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
    }