Hi,
I need help with a for loop and printing data. I want to loop through a
few years and print the data from each year stacked on top of each other.
For example,
for (i in 2000:2003){
#script for downloading each year
Data = readLines(sprintf('file/%4i,i))
}
It only prints out the data from the last year. Also, I tried
Data[i] = readLines(sprintf('file/%4i,i))
but it says:
"number of items to replace is not a multiple of replacement length"
How do I get it to not replace each year of data? I have R version 2.15.1
Thanks,
Alexandra
[[alternative HTML version deleted]]
Alexandra,
According to the documentation (?readLines), readLines returns a character
vector with one line from the file being read in each element of the vector. You
can put the character vector from each file (as represented by a year
designation in your example) in a separate list element. You want to count the
elements in the list starting at 1 not 2000. The integers from years[i] get
converted to strings in sprintf in the code below.
years <- 2000:2003
Data <- list(length(years))
for (i in seq_along(years)){
#script for downloading each year
Data[i] = readLines(sprintf('file/%s',years[i]))
}
# Data[1] will have the character vector made up of the lines in
'file/2000'.
Mark
R. Mark Sharp, Ph.D.
Director of Primate Records Database
Southwest National Primate Research Center
Texas Biomedical Research Institute
P.O. Box 760549
San Antonio, TX 78245-0549
Telephone: (210)258-9476
e-mail: msharp at TxBiomed.org
> On Feb 17, 2015, at 12:15 PM, Alexandra Catena <amc5981 at gmail.com>
wrote:
>
> Hi,
>
> I need help with a for loop and printing data. I want to loop through a
> few years and print the data from each year stacked on top of each other.
> For example,
>
> for (i in 2000:2003){
> #script for downloading each year
> Data = readLines(sprintf('file/%4i,i))
> }
>
> It only prints out the data from the last year. Also, I tried
>
> Data[i] = readLines(sprintf('file/%4i,i))
>
> but it says:
>
> "number of items to replace is not a multiple of replacement
length"
>
> How do I get it to not replace each year of data? I have R version 2.15.1
>
> Thanks,
> Alexandra
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at 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.
NOTICE: This E-Mail (including attachments) is confidential and may be legally
privileged. It is covered by the Electronic Communications Privacy Act, 18
U.S.C.2510-2521. If you are not the intended recipient, you are hereby notified
that any retention, dissemination, distribution or copying of this communication
is strictly prohibited. Please reply to the sender that you have received this
message in error, then delete it.
Alexandra,
According to the documentation (?readLines), readLines returns a character
vector with one line from the file being read in each element of the vector. You
can put the character vector from each file (as represented by a year
designation in your example) in a separate list element. You want to count the
elements in the list starting at 1 not 2000. The integers from years[i] get
converted to strings in sprintf in the code below.
years <- 2000:2003
Data <- list(length(years))
for (i in seq_along(years)){
#script for downloading each year
Data[i] = readLines(sprintf('file/%s',years[i]))
}
# Data[1] will have the character vector made up of the lines in
'file/2000'.
Mark
R. Mark Sharp, Ph.D.
Director of Primate Records Database
Southwest National Primate Research Center
Texas Biomedical Research Institute
P.O. Box 760549
San Antonio, TX 78245-0549
Telephone: (210)258-9476
e-mail: msharp at TxBiomed.org
> On Feb 17, 2015, at 12:15 PM, Alexandra Catena <amc5981 at gmail.com>
wrote:
>
> Hi,
>
> I need help with a for loop and printing data. I want to loop through a
> few years and print the data from each year stacked on top of each other.
> For example,
>
> for (i in 2000:2003){
> #script for downloading each year
> Data = readLines(sprintf('file/%4i,i))
> }
>
> It only prints out the data from the last year. Also, I tried
>
> Data[i] = readLines(sprintf('file/%4i,i))
>
> but it says:
>
> "number of items to replace is not a multiple of replacement
length"
>
> How do I get it to not replace each year of data? I have R version 2.15.1
>
> Thanks,
> Alexandra
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at 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.
R. Mark Sharp, Ph.D.
Director of Primate Records Database
Southwest National Primate Research Center
Texas Biomedical Research Institute
P.O. Box 760549
San Antonio, TX 78245-0549
Telephone: (210)258-9476
e-mail: msharp at TxBiomed.org
NOTICE: This E-Mail (including attachments) is confidential and may be legally
privileged. It is covered by the Electronic Communications Privacy Act, 18
U.S.C.2510-2521. If you are not the intended recipient, you are hereby notified
that any retention, dissemination, distribution or copying of this communication
is strictly prohibited. Please reply to the sender that you have received this
message in error, then delete it.
Hello,
Try the following.
Data <- lapply(sprintf('file/%4i', 2000:2003), readLines)
This will give you a list with 4 elements, each of which is the contents
of each file.
Hope this helps,
Rui Barradas
Em 17-02-2015 18:15, Alexandra Catena escreveu:> Hi,
>
> I need help with a for loop and printing data. I want to loop through a
> few years and print the data from each year stacked on top of each other.
> For example,
>
> for (i in 2000:2003){
> #script for downloading each year
> Data = readLines(sprintf('file/%4i,i))
> }
>
> It only prints out the data from the last year. Also, I tried
>
> Data[i] = readLines(sprintf('file/%4i,i))
>
> but it says:
>
> "number of items to replace is not a multiple of replacement
length"
>
> How do I get it to not replace each year of data? I have R version 2.15.1
>
> Thanks,
> Alexandra
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at 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.
>