read.fortran format

classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

read.fortran format

syen04
Dear fellow R users:
I am reading a data (ascii) file with fortran fixed format, containing
multiple records. R does not recognize fortran's record break (a slash).
I tried to do the following but it does not work. Help appreciated.

  60 FORMAT(1X,F6.0,5F8.6/1X,5F8.4,F10.6/1X,2F6.0,3E15.9,F8.0,F5.2,F5.3
      *      /1X,F7.0,2E15.9,F9.4,F5.3)

mydata<-read.fortran("G:/Journals/Disk1/12_restat_95/estimate/GROUPD.DAT",
         c("1X","F6.0","5F8.6"/"1X","5F8.4","F10.6"
          /"1X","2F6.0","3E15.9","F8.0","F5.2","F5.3"
          /"1X","F7.0","2E15.9","F9.4","F5.3"),
col.names=c("year","w1","w2","w3","w4","w5","w6","v1","v2","v3",
"v4","v5","v6","z","chyes","chno","ec","vc","cvc",
"pop","ahs","fah","tnh","eq","vq","ups","zm1 "))



        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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 | Threaded
Open this post in threaded view
|

Re: read.fortran format

John McKown
On Fri, May 27, 2016 at 12:56 PM, Steven Yen <[hidden email]> wrote:

> Dear fellow R users:
> I am reading a data (ascii) file with fortran fixed format, containing
> multiple records. R does not recognize fortran's record break (a slash).
> I tried to do the following but it does not work. Help appreciated.
>
>   60 FORMAT(1X,F6.0,5F8.6/1X,5F8.4,F10.6/1X,2F6.0,3E15.9,F8.0,F5.2,F5.3
>       *      /1X,F7.0,2E15.9,F9.4,F5.3)
>
> mydata<-read.fortran("G:/Journals/Disk1/12_restat_95/estimate/GROUPD.DAT",
> ​​
>          c("1X","F6.0","5F8.6"/"1X","5F8.4","F10.6"
>           /"1X","2F6.0","3E15.9","F8.0","F5.2","F5.3"
>           /"1X","F7.0","2E15.9","F9.4","F5.3"),
> ​​
> col.names=c("year","w1","w2","w3","w4","w5","w6","v1","v2","v3",
> "v4","v5","v6","z","chyes","chno","ec","vc","cvc",
> "pop","ahs","fah","tnh","eq","vq","ups","zm1 "))
>

​Did you see this from ?read.fortran

<quote>

 For a single-line record, ‘format’ should be a character vector.
     For a multiline record it should be a list with a character vector
     for each line.

</quote>​


​I think (not sure) you need:

mydata<-read.frotran("G:/Journals/Disk1/12_restat_95/estimate/GROUPD.DAT",
list(c("1X","F6.0","5F8.6"),c("1X","5F8.4","F10.6"),c("1X","2F6.0","3E15.9","F8.0","F5.2","F5.3"),c("1X","F7.0","2E15.9","F9.4","F5.3")).

col.names=c("year","w1","w2","w3","w4","w5","w6","v1","v2","v3",
"v4","v5","v6","z","chyes","chno","ec","vc","cvc",
"pop","ahs","fah","tnh","eq","vq","ups","zm1 "))





--
The unfacts, did we have them, are too imprecisely few to warrant our
certitude.

Maranatha! <><
John McKown

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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 | Threaded
Open this post in threaded view
|

Re: read.fortran format

syen04
Thanks John. That helped, but I got a mixed of good thing and bad thing.
Good is R does not like the scientific number format "3E15.9" but I was
able to read with alphanumerical format "3A15" (and convert to
numerical). Bad is R does not like the numbers .1234, .2345 without the
zeros before the decimal points. My data look like:

   1950. .614350 .026834 .087227 .006821 .180001 .084766

The first variable was read correctly, followed by six 0's.

As the instructions say, this fortran format is approximation at best
and in this case, a poort approximation.

On 5/27/2016 2:21 PM, John McKown wrote:

> On Fri, May 27, 2016 at 12:56 PM, Steven Yen <[hidden email]
> <mailto:[hidden email]>>wrote:
>
>     Dear fellow R users:
>     I am reading a data (ascii) file with fortran fixed format, containing
>     multiple records. R does not recognize fortran's record break (a
>     slash).
>     I tried to do the following but it does not work. Help appreciated.
>
>       60
>     FORMAT(1X,F6.0,5F8.6/1X,5F8.4,F10.6/1X,2F6.0,3E15.9,F8.0,F5.2,F5.3
>           *      /1X,F7.0,2E15.9,F9.4,F5.3)
>
>     mydata<-read.fortran("G:/Journals/Disk1/12_restat_95/estimate/GROUPD.DAT",
>     ​​
>              c("1X","F6.0","5F8.6"/"1X","5F8.4","F10.6"
>               /"1X","2F6.0","3E15.9","F8.0","F5.2","F5.3"
>               /"1X","F7.0","2E15.9","F9.4","F5.3"),
>     ​​
>     col.names=c("year","w1","w2","w3","w4","w5","w6","v1","v2","v3",
>     "v4","v5","v6","z","chyes","chno","ec","vc","cvc",
>     "pop","ahs","fah","tnh","eq","vq","ups","zm1 "))
>
>
> ​Did you see this from ?read.fortran
>
> <quote>
>
>  For a single-line record, ‘format’ should be a character vector.
>    For a multiline record it should be a list with a character vector
>    for each line.
>
> </quote>​
>
> ​I think (not sure) you need:
>
> mydata<-read.frotran("G:/Journals/Disk1/12_restat_95/estimate/GROUPD.DAT",
> list(c("1X","F6.0","5F8.6"),c("1X","5F8.4","F10.6"),c("1X","2F6.0","3E15.9","F8.0","F5.2","F5.3"),c("1X","F7.0","2E15.9","F9.4","F5.3")).
> ​
> col.names=c("year","w1","w2","w3","w4","w5","w6","v1","v2","v3",
> "v4","v5","v6","z","chyes","chno","ec","vc","cvc",
> "pop","ahs","fah","tnh","eq","vq","ups","zm1 "))
>
>
>
>
>
> --
> The unfacts, did we have them, are too imprecisely few to warrant our
> certitude.
>
> Maranatha! <><
> John McKown


        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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 | Threaded
Open this post in threaded view
|

Re: read.fortran format

R help mailing list-2
It has been a while since I used Fortran formatted input, but the following,
without dots in the format, works:

> txt <- "1950. .614350 .026834 .087227 .006821 .180001 4.56E-2"
> print(read.fortran(textConnection(txt), c("f5", "6f8")), digits=10)
    V1      V2       V3       V4       V5       V6     V7
1 1950 0.61435 0.026834 0.087227 0.006821 0.180001 0.0456


If I recall correctly, a dot in the format pushes the decimal point:

> print(read.fortran(textConnection(txt), c("f5", "6f8.3")), digits=10)
    V1         V2         V3         V4        V5          V6       V7
1 1950 0.00061435 2.6834e-05 8.7227e-05 6.821e-06 0.000180001 4.56e-05



Bill Dunlap
TIBCO Software
wdunlap tibco.com

On Fri, May 27, 2016 at 3:15 PM, Steven Yen <[hidden email]> wrote:

> Thanks John. That helped, but I got a mixed of good thing and bad thing.
> Good is R does not like the scientific number format "3E15.9" but I was
> able to read with alphanumerical format "3A15" (and convert to
> numerical). Bad is R does not like the numbers .1234, .2345 without the
> zeros before the decimal points. My data look like:
>
>    1950. .614350 .026834 .087227 .006821 .180001 .084766
>
> The first variable was read correctly, followed by six 0's.
>
> As the instructions say, this fortran format is approximation at best
> and in this case, a poort approximation.
>
> On 5/27/2016 2:21 PM, John McKown wrote:
> > On Fri, May 27, 2016 at 12:56 PM, Steven Yen <[hidden email]
> > <mailto:[hidden email]>>wrote:
> >
> >     Dear fellow R users:
> >     I am reading a data (ascii) file with fortran fixed format,
> containing
> >     multiple records. R does not recognize fortran's record break (a
> >     slash).
> >     I tried to do the following but it does not work. Help appreciated.
> >
> >       60
> >     FORMAT(1X,F6.0,5F8.6/1X,5F8.4,F10.6/1X,2F6.0,3E15.9,F8.0,F5.2,F5.3
> >           *      /1X,F7.0,2E15.9,F9.4,F5.3)
> >
> >
>  mydata<-read.fortran("G:/Journals/Disk1/12_restat_95/estimate/GROUPD.DAT",
> >     ​​
> >              c("1X","F6.0","5F8.6"/"1X","5F8.4","F10.6"
> >               /"1X","2F6.0","3E15.9","F8.0","F5.2","F5.3"
> >               /"1X","F7.0","2E15.9","F9.4","F5.3"),
> >     ​​
> >     col.names=c("year","w1","w2","w3","w4","w5","w6","v1","v2","v3",
> >     "v4","v5","v6","z","chyes","chno","ec","vc","cvc",
> >     "pop","ahs","fah","tnh","eq","vq","ups","zm1 "))
> >
> >
> > ​Did you see this from ?read.fortran
> >
> > <quote>
> >
> >  For a single-line record, ‘format’ should be a character vector.
> >    For a multiline record it should be a list with a character vector
> >    for each line.
> >
> > </quote>​
> >
> > ​I think (not sure) you need:
> >
> >
> mydata<-read.frotran("G:/Journals/Disk1/12_restat_95/estimate/GROUPD.DAT",
> >
> list(c("1X","F6.0","5F8.6"),c("1X","5F8.4","F10.6"),c("1X","2F6.0","3E15.9","F8.0","F5.2","F5.3"),c("1X","F7.0","2E15.9","F9.4","F5.3")).
> > ​
> > col.names=c("year","w1","w2","w3","w4","w5","w6","v1","v2","v3",
> > "v4","v5","v6","z","chyes","chno","ec","vc","cvc",
> > "pop","ahs","fah","tnh","eq","vq","ups","zm1 "))
> >
> >
> >
> >
> >
> > --
> > The unfacts, did we have them, are too imprecisely few to warrant our
> > certitude.
> >
> > Maranatha! <><
> > John McKown
>
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> [hidden email] 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.

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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 | Threaded
Open this post in threaded view
|

Re: read.fortran format

syen04
That's great, John. Your mother told you when you were born? How am I
supposed to know? Thank you both.
The following format statement did it!! I just change F5.3 to F5, 5F8.4
to 5F8. I also change 2E15.9 to 2A9, and then use the following
as.numeric to convert the alphanumerical to numerical. Thank you!!!

mydata<-read.fortran("GROUPC.DAT",
         list(c("1X","F6","5F8"),
              c("1X","5F8","F10"),
              c("1X","2F6","3A15","F8","F5","F5"),
              c("1X","F7","2A15","F9","F5")),
col.names=c("year","w1","w2","w3","w4","w5","v1","v2","v3",
"v4","v5","m","chyes","chno","ec","vc","cvc",
"pop","ahs","fah","tnh","eq","vq","ups","zm1"))
mydata$ec <-as.numeric(mydata$ec)

On 5/27/2016 6:33 PM, William Dunlap wrote:

> It has been a while since I used Fortran formatted input, but the
> following,
> without dots in the format, works:
>
>     > txt <- "1950. .614350 .026834 .087227 .006821 .180001 4.56E-2"
>     > print(read.fortran(textConnection(txt), c("f5", "6f8")), digits=10)
>         V1      V2       V3       V4       V5       V6 V7
>     1 1950 0.61435 0.026834 0.087227 0.006821 0.180001 0.0456
>
>
> If I recall correctly, a dot in the format pushes the decimal point:
>
>     > print(read.fortran(textConnection(txt), c("f5", "6f8.3")),
>     digits=10)
>         V1         V2         V3         V4        V5          V6       V7
>     1 1950 0.00061435 2.6834e-05 8.7227e-05 6.821e-06 0.000180001 4.56e-05
>
>
>
> Bill Dunlap
> TIBCO Software
> wdunlap tibco.com <http://tibco.com>
>
> On Fri, May 27, 2016 at 3:15 PM, Steven Yen <[hidden email]
> <mailto:[hidden email]>> wrote:
>
>     Thanks John. That helped, but I got a mixed of good thing and bad
>     thing.
>     Good is R does not like the scientific number format "3E15.9" but
>     I was
>     able to read with alphanumerical format "3A15" (and convert to
>     numerical). Bad is R does not like the numbers .1234, .2345
>     without the
>     zeros before the decimal points. My data look like:
>
>        1950. .614350 .026834 .087227 .006821 .180001 .084766
>
>     The first variable was read correctly, followed by six 0's.
>
>     As the instructions say, this fortran format is approximation at best
>     and in this case, a poort approximation.
>
>     On 5/27/2016 2:21 PM, John McKown wrote:
>     > On Fri, May 27, 2016 at 12:56 PM, Steven Yen <[hidden email]
>     <mailto:[hidden email]>
>     > <mailto:[hidden email] <mailto:[hidden email]>>>wrote:
>     >
>     >     Dear fellow R users:
>     >     I am reading a data (ascii) file with fortran fixed format,
>     containing
>     >     multiple records. R does not recognize fortran's record break (a
>     >     slash).
>     >     I tried to do the following but it does not work. Help
>     appreciated.
>     >
>     >       60
>     >  FORMAT(1X,F6.0,5F8.6/1X,5F8.4,F10.6/1X,2F6.0,3E15.9,F8.0,F5.2,F5.3
>     >           *      /1X,F7.0,2E15.9,F9.4,F5.3)
>     >
>     >
>      mydata<-read.fortran("G:/Journals/Disk1/12_restat_95/estimate/GROUPD.DAT",
>     >     ​​
>     >              c("1X","F6.0","5F8.6"/"1X","5F8.4","F10.6"
>     >  /"1X","2F6.0","3E15.9","F8.0","F5.2","F5.3"
>     >               /"1X","F7.0","2E15.9","F9.4","F5.3"),
>     >     ​​
>     >  col.names=c("year","w1","w2","w3","w4","w5","w6","v1","v2","v3",
>     >     "v4","v5","v6","z","chyes","chno","ec","vc","cvc",
>     >     "pop","ahs","fah","tnh","eq","vq","ups","zm1 "))
>     >
>     >
>     > ​Did you see this from ?read.fortran
>     >
>     > <quote>
>     >
>     >  For a single-line record, ‘format’ should be a character vector.
>     >    For a multiline record it should be a list with a character
>     vector
>     >    for each line.
>     >
>     > </quote>​
>     >
>     > ​I think (not sure) you need:
>     >
>     >
>     mydata<-read.frotran("G:/Journals/Disk1/12_restat_95/estimate/GROUPD.DAT",
>     >
>     list(c("1X","F6.0","5F8.6"),c("1X","5F8.4","F10.6"),c("1X","2F6.0","3E15.9","F8.0","F5.2","F5.3"),c("1X","F7.0","2E15.9","F9.4","F5.3")).
>     > ​
>     > col.names=c("year","w1","w2","w3","w4","w5","w6","v1","v2","v3",
>     > "v4","v5","v6","z","chyes","chno","ec","vc","cvc",
>     > "pop","ahs","fah","tnh","eq","vq","ups","zm1 "))
>     >
>     >
>     >
>     >
>     >
>     > --
>     > The unfacts, did we have them, are too imprecisely few to
>     warrant our
>     > certitude.
>     >
>     > Maranatha! <><
>     > John McKown
>
>
>             [[alternative HTML version deleted]]
>
>     ______________________________________________
>     [hidden email] <mailto:[hidden email]> 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.
>
>


        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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 | Threaded
Open this post in threaded view
|

Re: read.fortran format

Jeff Newmiller
Your rather sarcastic comment about knowledge given by John's mother seems inappropriate, given that he told you where his information came from and it is the first place you should have looked.

The bit about the decimal leading to a shift in the decimal place pointed out by Bill is a bit obscure, though it to is mentioned in the help file.

The "D" format is broken though... the regex template in the processFormat embedded function is missing that option. Bill's use of 'F' instead with no decimal is the easy workaround, but that is a bug.
--
Sent from my phone. Please excuse my brevity.

On May 27, 2016 8:30:49 PM PDT, Steven Yen <[hidden email]> wrote:

>That's great, John. Your mother told you when you were born? How am I
>supposed to know? Thank you both.
>The following format statement did it!! I just change F5.3 to F5, 5F8.4
>
>to 5F8. I also change 2E15.9 to 2A9, and then use the following
>as.numeric to convert the alphanumerical to numerical. Thank you!!!
>
>mydata<-read.fortran("GROUPC.DAT",
>         list(c("1X","F6","5F8"),
>              c("1X","5F8","F10"),
>              c("1X","2F6","3A15","F8","F5","F5"),
>              c("1X","F7","2A15","F9","F5")),
>col.names=c("year","w1","w2","w3","w4","w5","v1","v2","v3",
>"v4","v5","m","chyes","chno","ec","vc","cvc",
>"pop","ahs","fah","tnh","eq","vq","ups","zm1"))
>mydata$ec <-as.numeric(mydata$ec)
>
>On 5/27/2016 6:33 PM, William Dunlap wrote:
>> It has been a while since I used Fortran formatted input, but the
>> following,
>> without dots in the format, works:
>>
>>     > txt <- "1950. .614350 .026834 .087227 .006821 .180001 4.56E-2"
>>     > print(read.fortran(textConnection(txt), c("f5", "6f8")),
>digits=10)
>>         V1      V2       V3       V4       V5       V6 V7
>>     1 1950 0.61435 0.026834 0.087227 0.006821 0.180001 0.0456
>>
>>
>> If I recall correctly, a dot in the format pushes the decimal point:
>>
>>     > print(read.fortran(textConnection(txt), c("f5", "6f8.3")),
>>     digits=10)
>>         V1         V2         V3         V4        V5          V6    
>  V7
>>     1 1950 0.00061435 2.6834e-05 8.7227e-05 6.821e-06 0.000180001
>4.56e-05
>>
>>
>>
>> Bill Dunlap
>> TIBCO Software
>> wdunlap tibco.com <http://tibco.com>
>>
>> On Fri, May 27, 2016 at 3:15 PM, Steven Yen <[hidden email]
>> <mailto:[hidden email]>> wrote:
>>
>>     Thanks John. That helped, but I got a mixed of good thing and bad
>>     thing.
>>     Good is R does not like the scientific number format "3E15.9" but
>>     I was
>>     able to read with alphanumerical format "3A15" (and convert to
>>     numerical). Bad is R does not like the numbers .1234, .2345
>>     without the
>>     zeros before the decimal points. My data look like:
>>
>>        1950. .614350 .026834 .087227 .006821 .180001 .084766
>>
>>     The first variable was read correctly, followed by six 0's.
>>
>>     As the instructions say, this fortran format is approximation at
>best
>>     and in this case, a poort approximation.
>>
>>     On 5/27/2016 2:21 PM, John McKown wrote:
>>     > On Fri, May 27, 2016 at 12:56 PM, Steven Yen <[hidden email]
>>     <mailto:[hidden email]>
>>     > <mailto:[hidden email] <mailto:[hidden email]>>>wrote:
>>     >
>>     >     Dear fellow R users:
>>     >     I am reading a data (ascii) file with fortran fixed format,
>>     containing
>>     >     multiple records. R does not recognize fortran's record
>break (a
>>     >     slash).
>>     >     I tried to do the following but it does not work. Help
>>     appreciated.
>>     >
>>     >       60
>>     >
>FORMAT(1X,F6.0,5F8.6/1X,5F8.4,F10.6/1X,2F6.0,3E15.9,F8.0,F5.2,F5.3
>>     >           *      /1X,F7.0,2E15.9,F9.4,F5.3)
>>     >
>>     >
>>    
>mydata<-read.fortran("G:/Journals/Disk1/12_restat_95/estimate/GROUPD.DAT",
>>     >     ​​
>>     >              c("1X","F6.0","5F8.6"/"1X","5F8.4","F10.6"
>>     >  /"1X","2F6.0","3E15.9","F8.0","F5.2","F5.3"
>>     >               /"1X","F7.0","2E15.9","F9.4","F5.3"),
>>     >     ​​
>>     >
>col.names=c("year","w1","w2","w3","w4","w5","w6","v1","v2","v3",
>>     >     "v4","v5","v6","z","chyes","chno","ec","vc","cvc",
>>     >     "pop","ahs","fah","tnh","eq","vq","ups","zm1 "))
>>     >
>>     >
>>     > ​Did you see this from ?read.fortran
>>     >
>>     > <quote>
>>     >
>>     >  For a single-line record, ‘format’ should be a character
>vector.
>>     >    For a multiline record it should be a list with a character
>>     vector
>>     >    for each line.
>>     >
>>     > </quote>​
>>     >
>>     > ​I think (not sure) you need:
>>     >
>>     >
>>    
>mydata<-read.frotran("G:/Journals/Disk1/12_restat_95/estimate/GROUPD.DAT",
>>     >
>>    
>list(c("1X","F6.0","5F8.6"),c("1X","5F8.4","F10.6"),c("1X","2F6.0","3E15.9","F8.0","F5.2","F5.3"),c("1X","F7.0","2E15.9","F9.4","F5.3")).
>>     > ​
>>     >
>col.names=c("year","w1","w2","w3","w4","w5","w6","v1","v2","v3",
>>     > "v4","v5","v6","z","chyes","chno","ec","vc","cvc",
>>     > "pop","ahs","fah","tnh","eq","vq","ups","zm1 "))
>>     >
>>     >
>>     >
>>     >
>>     >
>>     > --
>>     > The unfacts, did we have them, are too imprecisely few to
>>     warrant our
>>     > certitude.
>>     >
>>     > Maranatha! <><
>>     > John McKown
>>
>>
>>             [[alternative HTML version deleted]]
>>
>>     ______________________________________________
>>     [hidden email] <mailto:[hidden email]> 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.
>>
>>
>
>
> [[alternative HTML version deleted]]
>
>______________________________________________
>[hidden email] 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.

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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 | Threaded
Open this post in threaded view
|

Re: read.fortran format

R help mailing list-2
>The bit about the decimal leading to a shift in the decimal place
>pointed out by Bill is a bit obscure, though it to is mentioned in the
help file.

I don't think that is how real Fortran formats work.  My memory is that
you only put a dot in the format if there were no dots in your data file
(so you could avoid wasting one of the 80 columns on the punched card
on a dot).

With current gfortran, putting a dot in the data overrides the decimal
place specification in the format.

% cat format.f
      double precision d1, d2
      integer*4 i1
      integer*4 i

 10   format(I2F7.1F7.6)
      do 20 i=1,100
        read(*,10) i1, d1, d2
        write(*,*) i1, d1, d2
 20   continue
      stop
      end

% gfortran format.f -o format.exe
% ./format.exe
1234012340987654
          12   340123.40000000002       0.98765400000000003
123.0123409.7e20
          12   3.0123400000000000        9.7000000000000000E+020
123.012340976e20
          12   3.0123400000000000        97600000000000000.






Bill Dunlap
TIBCO Software
wdunlap tibco.com

On Fri, May 27, 2016 at 10:14 PM, Jeff Newmiller <[hidden email]>
wrote:

> Your rather sarcastic comment about knowledge given by John's mother seems
> inappropriate, given that he told you where his information came from and
> it is the first place you should have looked.
>
> The bit about the decimal leading to a shift in the decimal place pointed
> out by Bill is a bit obscure, though it to is mentioned in the help file.
>
> The "D" format is broken though... the regex template in the processFormat
> embedded function is missing that option. Bill's use of 'F' instead with no
> decimal is the easy workaround, but that is a bug.
> --
> Sent from my phone. Please excuse my brevity.
>
> On May 27, 2016 8:30:49 PM PDT, Steven Yen <[hidden email]> wrote:
> >That's great, John. Your mother told you when you were born? How am I
> >supposed to know? Thank you both.
> >The following format statement did it!! I just change F5.3 to F5, 5F8.4
> >
> >to 5F8. I also change 2E15.9 to 2A9, and then use the following
> >as.numeric to convert the alphanumerical to numerical. Thank you!!!
> >
> >mydata<-read.fortran("GROUPC.DAT",
> >         list(c("1X","F6","5F8"),
> >              c("1X","5F8","F10"),
> >              c("1X","2F6","3A15","F8","F5","F5"),
> >              c("1X","F7","2A15","F9","F5")),
> >col.names=c("year","w1","w2","w3","w4","w5","v1","v2","v3",
> >"v4","v5","m","chyes","chno","ec","vc","cvc",
> >"pop","ahs","fah","tnh","eq","vq","ups","zm1"))
> >mydata$ec <-as.numeric(mydata$ec)
> >
> >On 5/27/2016 6:33 PM, William Dunlap wrote:
> >> It has been a while since I used Fortran formatted input, but the
> >> following,
> >> without dots in the format, works:
> >>
> >>     > txt <- "1950. .614350 .026834 .087227 .006821 .180001 4.56E-2"
> >>     > print(read.fortran(textConnection(txt), c("f5", "6f8")),
> >digits=10)
> >>         V1      V2       V3       V4       V5       V6 V7
> >>     1 1950 0.61435 0.026834 0.087227 0.006821 0.180001 0.0456
> >>
> >>
> >> If I recall correctly, a dot in the format pushes the decimal point:
> >>
> >>     > print(read.fortran(textConnection(txt), c("f5", "6f8.3")),
> >>     digits=10)
> >>         V1         V2         V3         V4        V5          V6
> >  V7
> >>     1 1950 0.00061435 2.6834e-05 8.7227e-05 6.821e-06 0.000180001
> >4.56e-05
> >>
> >>
> >>
> >> Bill Dunlap
> >> TIBCO Software
> >> wdunlap tibco.com <http://tibco.com>
> >>
> >> On Fri, May 27, 2016 at 3:15 PM, Steven Yen <[hidden email]
> >> <mailto:[hidden email]>> wrote:
> >>
> >>     Thanks John. That helped, but I got a mixed of good thing and bad
> >>     thing.
> >>     Good is R does not like the scientific number format "3E15.9" but
> >>     I was
> >>     able to read with alphanumerical format "3A15" (and convert to
> >>     numerical). Bad is R does not like the numbers .1234, .2345
> >>     without the
> >>     zeros before the decimal points. My data look like:
> >>
> >>        1950. .614350 .026834 .087227 .006821 .180001 .084766
> >>
> >>     The first variable was read correctly, followed by six 0's.
> >>
> >>     As the instructions say, this fortran format is approximation at
> >best
> >>     and in this case, a poort approximation.
> >>
> >>     On 5/27/2016 2:21 PM, John McKown wrote:
> >>     > On Fri, May 27, 2016 at 12:56 PM, Steven Yen <[hidden email]
> >>     <mailto:[hidden email]>
> >>     > <mailto:[hidden email] <mailto:[hidden email]>>>wrote:
> >>     >
> >>     >     Dear fellow R users:
> >>     >     I am reading a data (ascii) file with fortran fixed format,
> >>     containing
> >>     >     multiple records. R does not recognize fortran's record
> >break (a
> >>     >     slash).
> >>     >     I tried to do the following but it does not work. Help
> >>     appreciated.
> >>     >
> >>     >       60
> >>     >
> >FORMAT(1X,F6.0,5F8.6/1X,5F8.4,F10.6/1X,2F6.0,3E15.9,F8.0,F5.2,F5.3
> >>     >           *      /1X,F7.0,2E15.9,F9.4,F5.3)
> >>     >
> >>     >
> >>
> >mydata<-read.fortran("G:/Journals/Disk1/12_restat_95/estimate/GROUPD.DAT",
> >>     >     ​​
> >>     >              c("1X","F6.0","5F8.6"/"1X","5F8.4","F10.6"
> >>     >  /"1X","2F6.0","3E15.9","F8.0","F5.2","F5.3"
> >>     >               /"1X","F7.0","2E15.9","F9.4","F5.3"),
> >>     >     ​​
> >>     >
> >col.names=c("year","w1","w2","w3","w4","w5","w6","v1","v2","v3",
> >>     >     "v4","v5","v6","z","chyes","chno","ec","vc","cvc",
> >>     >     "pop","ahs","fah","tnh","eq","vq","ups","zm1 "))
> >>     >
> >>     >
> >>     > ​Did you see this from ?read.fortran
> >>     >
> >>     > <quote>
> >>     >
> >>     >  For a single-line record, ‘format’ should be a character
> >vector.
> >>     >    For a multiline record it should be a list with a character
> >>     vector
> >>     >    for each line.
> >>     >
> >>     > </quote>​
> >>     >
> >>     > ​I think (not sure) you need:
> >>     >
> >>     >
> >>
> >mydata<-read.frotran("G:/Journals/Disk1/12_restat_95/estimate/GROUPD.DAT",
> >>     >
> >>
>
> >list(c("1X","F6.0","5F8.6"),c("1X","5F8.4","F10.6"),c("1X","2F6.0","3E15.9","F8.0","F5.2","F5.3"),c("1X","F7.0","2E15.9","F9.4","F5.3")).
> >>     > ​
> >>     >
> >col.names=c("year","w1","w2","w3","w4","w5","w6","v1","v2","v3",
> >>     > "v4","v5","v6","z","chyes","chno","ec","vc","cvc",
> >>     > "pop","ahs","fah","tnh","eq","vq","ups","zm1 "))
> >>     >
> >>     >
> >>     >
> >>     >
> >>     >
> >>     > --
> >>     > The unfacts, did we have them, are too imprecisely few to
> >>     warrant our
> >>     > certitude.
> >>     >
> >>     > Maranatha! <><
> >>     > John McKown
> >>
> >>
> >>             [[alternative HTML version deleted]]
> >>
> >>     ______________________________________________
> >>     [hidden email] <mailto:[hidden email]> 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.
> >>
> >>
> >
> >
> >       [[alternative HTML version deleted]]
> >
> >______________________________________________
> >[hidden email] 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.
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> [hidden email] 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.
>

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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.