Hi R users
Here is what I got with help from Petr Pikal (Thanks Petr Pikal). I modified
Petr Pikal's code to a little
to meet my purpose.
I created a function to generate a matrix
generate.matrix<-function(n.variable)
{
mat<-matrix(0,n.variable,(n.variable/2)/5+1) #matrix of zeroes
dd<-dim(mat) # actual dimensions
mat[1:(dd[1]/2),1]<-1 #put 1 in first half of first column
mat[((dd[1]/2)+1):dd[1],1]<-rnorm(dd[1]/2,0,1) #put random numbers in
following part of the matrix column 1
mat[((dd[1]/2)+1):((dd[1]/2)+5),2]<-rnorm(5,0,1) #put random numbers in
column2
for (i in 3:(dd[2]))
{
length.of.rand.numbers <- 5
my.rand.num<- rnorm(length.of.rand.numbers, 0,1)
start <- dd[1]/2+5*(i-2)+1
end <- start + length.of.rand.numbers-1
mat[((start):end), i]<- my.rand.num
}
mat
}
Do you (any R users) have any suggestion to this function to make this
function work better or efficiently?
Taka
It works but I
From: "Petr Pikal" <petr.pikal at precheza.cz>
To: "Taka Matzmoto" <sell_mirage_ne at hotmail.com>,r-help at stat.math.ethz.ch
Subject: Re: [R] creating a certain type of matrix
Date: Tue, 07 Feb 2006 08:58:59 +0100
MIME-Version: 1.0
Received: from mail.precheza.cz ([80.188.29.243]) by
bay0-mc8-f13.bay0.hotmail.com with Microsoft SMTPSVC(6.0.3790.211); Mon, 6
Feb 2006 23:59:02 -0800
Received: from localhost (localhost [127.0.0.1])by mail.precheza.cz
(Mailer) with ESMTP id A636C34E584;Tue, 7 Feb 2006 08:59:00 +0100 (CET)
Received: from mail.precheza.cz ([127.0.0.1])by localhost (mail.precheza.cz
[127.0.0.1]) (amavisd-new, port 10024)with LMTP id 28608-02-30; Tue, 7 Feb
2006 08:58:59 +0100 (CET)
Received: from n1en1.precheza.cz (smtp.precheza.cz [192.168.210.31])by
mail.precheza.cz (Mailer) with ESMTP id 35E8634E582;Tue, 7 Feb 2006
08:58:59 +0100 (CET)
Received: from pikal ([192.168.210.65]) by n1en1.precheza.cz
(Lotus Domino Release 6.5.4FP2) with ESMTP id 2006020708585800-252
; Tue, 7 Feb 2006 08:58:58 +0100 X-Message-Info:
JGTYoYF78jEHjJx36Oi8+Z3TmmkSEdPtfpLB7P/ybN8=
X-Confirm-Reading-To: "Petr Pikal" <petr.pikal at precheza.cz>
X-pmrqc: 1
Return-Receipt-To: "Petr Pikal" <petr.pikal at precheza.cz>
Priority: normal
X-mailer: Pegasus Mail for Windows (4.21c)
X-MIMETrack: Itemize by SMTP Server on SRVDomino/PRECHEZA(Release 6.5.4FP2
| September 26, 2005) at 07.02.2006 08:58:58,Serialize by Router on
SRVDomino/PRECHEZA(Release 6.5.4FP2 | September 26, 2005) at 07.02.2006
08:58:58,Serialize complete at 07.02.2006 08:58:58
X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at precheza.cz
Return-Path: petr.pikal at precheza.cz
X-OriginalArrivalTime: 07 Feb 2006 07:59:03.0289 (UTC)
FILETIME=[5C87D690:01C62BBC]
Hi
as only you know perfectly which halves and other portions of your
matrices contain zeroes and which contain random numbers you has to
finalize the function yourself.
Here are few ideas.
n<-20
mat<-matrix(0,n,(n/2)/5+1) #matrix of zeroes
dd<-dim(mat) # actual dimensions
mat[1:(dd[1]/2),1]<-1 #put 1 in first half of first column
mat[((dd[1]/2)+1):dd[1],1]<-rnorm(dd[1]/2,0,1) #put random numbers in
following part of the matrix column 1
mat[((dd[1]/2)+1):(dd[1]/2)+dd[1]/4,2]<-rnorm(dd[1]/4,0,1) #put
random numbers in column2
than according to n and dd values you can put any numbers anywhere in
your matrix e.g. in for loop (not.tested :-)
for (i in 3:dd[2]) {
arrange everything into following desired columns
e.g.
length.of.rand.numbers <- (i-2)*5
my.rand.num<- rnorm(length.of.rand.numbers, 0,1)
start <- dd[1]/2+dd[1]/4
end <- start + length.of.rand.numbers
mat[start:end, i]<- my.rand.num
}
HTH
Petr
On 7 Feb 2006 at 0:07, Taka Matzmoto wrote:
From: "Taka Matzmoto" <sell_mirage_ne at hotmail.com>
To: r-help at stat.math.ethz.ch
Date sent: Tue, 07 Feb 2006 00:07:11 -0600
Subject: [R] creating a certain type of matrix
Hi R users
I like to generate a certain type of matrix.
If there are 10 variables, the matrix will have nrow=10,
ncol=((10/2))/5+1. so the resulting matrix's dimension 10 by 2. If
there are 50 variables the dimension of the resulting matrix will be
50 by 6.
The arrangement of elements of this matrix is important to me and I
can't figure out how to arrange elements.
If I have 20 variables. The resulting matrix will be 20 by 3
The first half of first column of the matrix will be 1s. The all
elements on the second half of the first column of the matrix will be
random numbers coming from rnorm(1,0,1). The first half of the second
column of the matrix will be zeros. The first five elements of the
second half of the second column of the matrix will be random numbers
coming from rnorm(1,0,1). After that, the remaining elements of the
second half will be zeros. The first half of the third column of the
matrix will be zeors. The first five elements of the second half of
the third column will be zeros too and then 5 random numbers coming
from rnorm(1,0,1).
If there are 40 variables the resulting matrix will be 40*5
The first half of first column of the matrix will be 1s. The all
elements on the second half of the first column of the matrix will be
random numbers coming from rnorm(1,0,1).
The first half of the second column of the matrix will be zeros. The
first five elements of the second half of the second column of the
matrix will be random numbers coming from rnorm(1,0,1). After that,
the remaining elements of the second half will be zeros.
The first half of the third column of the matrix will be zeors. The
first FIVE elements of the second half of the third column will be
zeros too and then 5 random numbers coming from rnorm(1,0,1) and then
the rest of elements of the third column will be zeros.
The first half of the fourth column of the matrix will be zeors.The
first TEN elements of the second half of the fourth column will be
zeros too and then 5 random numbers coming from rnorm(1,0,1) and then
the rest of elements of the third column will be zeros.
The first half of the fifth column of the matrix will be zeors.The
first FIFTEEN elements of the second half of the fourth column will be
zeros too and then 5 random numbers coming from rnorm(1,0,1).
I tried to create 10 different functions ( one for 10, 20, 30, 40,
.... , 100 variables) but it's not efficient.
Any help or advice for creating one function that can do all 10 kind
of variable cases would be appreciated.
Thans in advance
Taka