[Rd] parse(text=...) and the srcfile attribute
Duncan Murdoch
murdoch at stats.uwo.ca
Fri Jul 13 12:52:26 CEST 2007
On 12/07/2007 10:10 PM, Deepayan Sarkar wrote:
> On 7/12/07, Gabor Grothendieck <ggrothendieck at gmail.com> wrote:
>> You can do this:
>>
>>> foo at srcfile$lines
>> [1] "\na <- 1; b <- 2**2\na + b\n"
>>
>>> # or this
>>> as.character(foo)
>> [1] "a <- 1" "b <- 2^2" "a + b"
>
> Neither of which is what I want. I want
>
>> sapply(attr(foo, "srcref"), as.character)
> [1] "a <- 1" "b <- 2**2" "a + b"
>
> but was hoping for a better way than this.
I don't think there is one. The code for print(foo) is deep within the
deparser, and it never generates the things you want individually,
they're just part of what gets generated when it deparses foo. (One
reason for this design is that foo has a srcref attribute, its elements
don't, because the elements of an expression are not necessarily things
that can sensibly have attributes.)
So your one-liner is probably the best way to get what you want.
Duncan Murdoch
> -Deepayan
>
>> On 7/12/07, Deepayan Sarkar <deepayan.sarkar at gmail.com> wrote:
>>> Hi,
>>>
>>> I'm trying to understand whether the new source file references can
>>> help me with something I want to do. Let's say I have
>>>
>>> foo <- parse(text = "
>>> a <- 1; b <- 2**2
>>> a + b
>>> ")
>>>
>>> I now wish to recover the sources for the parsed expressions. I can
>>> get them one at a time:
>>>
>>>> foo[[2]]
>>> b <- 2^2
>>>> as.character(attr(foo, "srcref")[[2]])
>>> [1] "b <- 2**2"
>>>
>>> Is there a better way? Perhaps like the print method
>>>
>>>> as.character(foo, useSource = TRUE)
>>> could give all the sources at once?
>>>
>>> -Deepayan
>>>
>>> ______________________________________________
>>> R-devel at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>>
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
More information about the R-devel
mailing list