2016-02-05 3 views
0

Я пытаюсь создать матрицу в R без использования функции матрицы Я попытался это, но он работает только для 2-х строк как указать NROWS я понятия не имею,Матрица без матричной функции

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

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

    } 

Я хочу создать матрицу без использования функции матрицы и byrow не bycolmun Exemple функцию, я вхожу число столбцов и размерность N в моем Exemple и в свою очередь это создает матрицу

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

для exepmle

+0

Добро пожаловать в SO. Пожалуйста, отредактируйте свой пост и сделайте, если полный воспроизводимый пример, который показывает фактический и желаемый результат. – lukeA

+0

Я отредактировал его сейчас @lukeA – Mouna

+1

Почему вы хотите создать матрицу без использования функции матрицы? Можете ли вы показать пример ввода и ожидаемого вывода на основе этого? – Heroka

ответ

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 
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 
Смежные вопросы