没有矩阵函数的矩阵

时间:2016-02-05 11:35:59

标签: r matrix rbind

我试图在R中创建一个矩阵而不使用我试过的矩阵函数 这个,但它只适用于2行,如何指定nrows我不知道

matrix2<-function(n)
{ 
  d<-n/2

  v1<-c(1:d)
  v2<-c(d +1:n)
  x<- rbind(v1,v2)
  return(x)

  }

我想创建一个不使用矩阵函数的矩阵,而不是bycolmun 为例 一个函数我在我的例子中输入列数和维度N,作为回报它创建一个矩阵

     [,1] [,2]
[1,]    1    2
[2,]    3    4
[3,]    5    6
[4,]    7    8 

表示exepmle

2 个答案:

答案 0 :(得分:3)

这将为您提供指定列数的矩阵。我不确定你对维度N的意思。

matrix2 <- function(N, columns){

  d<-ceiling(N/columns) # rounds up to first integer

  x <- c()
  i <- 1

  for(row in 1:d){
    x <- rbind(x, c(i:(i+columns-1)))
    i <- i+columns
  }

  return(x)
}

> matrix2(8,2)
     [,1] [,2]
[1,]    1    2
[2,]    3    4
[3,]    5    6
[4,]    7    8

答案 1 :(得分:0)

您还可以通过列表使用间接。然后,您还可以设置列和行号。以及如何以行方式或列方式填充矩阵。

matrix2<-function(n,m,V,byRow=T){
  if(length(V) != n*m ) warning("length of the vector and rows*columns differs" )
  # split the vector 
  if(byRow) r <- n
  if(!byRow) r <- m
  fl <- 1:r # how often you have to split
  fg <- sort(rep_len(fl,length(V))) # create a "splitting-vector"
  L <- split(V,fg)
  # convert the list to a matrix
  if(byRow)  res <- do.call(rbind,L)  
  if(!byRow) res <-  do.call(cbind,L)  
  rownames(res) <- colnames(res) <- NULL 
  res #output
}

matrix2(2,4,1:8,F)

     [,1] [,2] [,3] [,4]
[1,]    1    3    5    7
[2,]    2    4    6    8

matrix2(2,4,1:8,T)

     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]    5    6    7    8