Às 20:26 de 03/07/2023, Sorkin, John escreveu:
Jeff,
Again my thanks for your guidance.
I replaced dimnames(myvalues)<-list(NULL,c(zzz))
with
colnames(myvalues)<-zzz
and get the same error,
Error in dimnames(x) <- dn :
   length of 'dimnames' [2] not equal to array extent
It appears that I am creating the string zzz in a manner that is not compatable 
with either
dimnames(myvalues)<-list(NULL,c(zzz))
or
colnames(myvalues)<-zzz

I think I need to modify the way I create the string zzz.

# create variable names xxx1 and xxx2.
string=""
for (j in 1:2){
   name <- paste("xxx",j,sep="")
   string <- paste(string,name)
   print(string)
}
# Creation of xxx1 and xxx2 works
string

# Create matrix
myvalues <- matrix(nrow=2,ncol=4)
head(myvalues,1)
# Add "j" and "k" to the string of column names
zzz <- paste("j","k",string)
zzz
# assign column names, j, k, xxx1, xxx2 to the matrix
# create column names, j, k, xxx1, xxx2.
dimnames(myvalues)<-list(NULL,c(zzz))
colnames(myvalues)<-zzz
________________________________________
From: Jeff Newmiller <jdnew...@dcn.davis.ca.us>
Sent: Monday, July 3, 2023 2:45 PM
To: Sorkin, John
Cc: r-help@r-project.org
Subject: Re: [R]  Create matrix with column names wiht the same prefix xxxx and 
that end in 1, 2

I really think you should read that help page.  colnames() accesses the second 
element of dimnames() directly.

On July 3, 2023 11:39:37 AM PDT, "Sorkin, John" <jsor...@som.umaryland.edu> 
wrote:
Jeff,
Thank you for your reply.
I should have said with dim names not column names. I want the Mateix to have 
dim names, no row names, dim names j, k, xxx1, xxx2.

John

John David Sorkin M.D., Ph.D.
Professor of Medicine
Chief, Biostatistics and Informatics
University of Maryland School of Medicine Division of Gerontology and Geriatric 
Medicine
Baltimore VA Medical Center
10 North Greene Street<x-apple-data-detectors://12>
GRECC<x-apple-data-detectors://12> (BT/18/GR)
Baltimore, MD 21201-1524<x-apple-data-detectors://13/0>
(Phone) 410-605-711<tel:410-605-7119>9
(Fax) 410-605-7913<tel:410-605-7913> (Please call phone number above prior to 
faxing)

On Jul 3, 2023, at 2:11 PM, Jeff Newmiller <jdnew...@dcn.davis.ca.us> wrote:

?colnames

On July 3, 2023 11:00:32 AM PDT, "Sorkin, John" <jsor...@som.umaryland.edu> 
wrote:
I am trying to create an array, myvalues, having 2 rows and 4 columns, where the column 
names are j,k,xxx1,xxx2. The code below fails, with the following error, "Error in 
dimnames(myvalues) <- list(NULL, zzz) :
length of 'dimnames' [2] not equal to array extent"

Please help me get the code to work.

Thank you,
John

# create variable names xxx1 and xxx2.
string=""
for (j in 1:2){
name <- paste("xxx",j,sep="")
string <- paste(string,name)
print(string)
}
# Creation of xxx1 and xxx2 works
string

# Create matrix
myvalues <- matrix(nrow=2,ncol=4)
head(myvalues,1)
# Add "j" and "k" to the string of column names
zzz <- paste("j","k",string)
zzz
# assign column names, j, k, xxx1, xxx2 to the matrix
# create column names, j, k, xxx1, xxx2.
dimnames(myvalues)<-list(NULL,zzz)


______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.r-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

--
Sent from my phone. Please excuse my brevity.

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.r-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

--
Sent from my phone. Please excuse my brevity.
______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Hello,

I should have pointed out in my answer that you are inded creating the names vector in a (very) wrong way. When in the loop you paste string and name you create one vector of length 1. When the loop ends, you have " xxx1 xxx2", not two names.


string=""
for (j in 1:2){
  name <- paste("xxx",j,sep="")
  string <- paste(string,name)
  print(string)
}
#> [1] " xxx1"
#> [1] " xxx1 xxx2"
# Creation of xxx1 and xxx2 works
string
#> [1] " xxx1 xxx2"



Quoting the comment above,

  Creation of xxx1 and xxx2 works

No, it does not!
And then you paste again, adding two extra letters to one string

zzz <- paste("j","k",string)


This zzz also is of length 1, check it.


With a loop the right way would be any of

# 1. concatenate the current name with string
string <- NULL   # or c(), perhaps more frequent
for (j in 1:2){
  name <- paste("xxx",j,sep="")
  string <- c(string, name)
  print(string)
}
#> [1] "xxx1"
#> [1] "xxx1" "xxx2"
# Now creation of xxx1 and xxx2 does work
string
#> [1] "xxx1" "xxx2"



# 2. create a vector of the appropriate length beforehand, my preferred
string <- character(2)
for (j in 1:2){
  string[j] <- paste0("xxx",j,sep="")
  print(string)
}
#> [1] "xxx1" ""
#> [1] "xxx1" "xxx2"
# Creation of xxx1 and xxx2 works
string
#> [1] "xxx1" "xxx2"



But the vectorized way is still the better one.

Hope this helps,

Rui Barradas

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to