[R] extract printed value from a function
Martin Maechler
maechler at stat.math.ethz.ch
Thu Feb 24 16:51:21 CET 2011
>>>>> "PE" == Peter Ehlers <ehlers at ucalgary.ca>
>>>>> on Thu, 24 Feb 2011 07:07:29 -0800 writes:
PE> On 2011-02-24 06:32, David Winsemius wrote:
>>
>> On Feb 24, 2011, at 7:22 AM, Peter Ehlers wrote:
>>
>>> On 2011-02-24 03:26, Duarte Viana wrote:
>>>> Hello all,
>>>>
>>>> This shouldn't be difficult, but I am not able to extract a
>>>> printed value from a function and assign it to an object.
>>>>
>>>> In my case,
>>>>
>>>>> library(DAAG)
>>>>> twotPermutation(c(2,3,4),c(3,6,5),plotit=F)
>>>> [1] 0.298
>>>>
>>>> I would like to assign this result to an object.
>>
>> A third suggestion which has virtues of simplicity and keeping
>> the result "numeric":
>>
>> x<- print( twotPermutation(c(2,3,4),c(3,6,5),plotit=F) )
PE> Does that work? Not for me.
>>
>> > x
>> [1] 0.1
PE> This may be some 'other' x. DAAG's twotPermutation() has an
PE> explicit
PE> print(signif(pval, 3))
PE> as its penultimate statement, followed by
PE> invisible()
PE> I don't know what, if any, advantage this code has over simply
PE> returning
PE> invisible(signif(pval, 3))
Indeed!
Your proposition is definitely better than the current code.
Even better would be to separate computation and printing
completely, and that would even involve the rounding step,
i.e. a "decent" twotPermutation() function would return an
interesting object of class, say "twotPerm" (with the unrounded 'pval')
which has its simple
print.twotPerm <- function(x, ...) { ... }
method.
Martin
PE> Peter Ehlers
>> > x<- print(invisible (0.2))
>> [1] 0.2
>> > x
>> [1] 0.2
>>
>> --
>>
>>
>>>
>>> Two suggestions:
>>> 1.
>>> Modify the code for twotPermutation by removing the
>>> invisible() at the end.
>>>
>>> 2.
>>> Use capture.output to capture the result and then convert to
>>> numeric:
>>>
>>> pvstring<- capture.output( twotPermutation( c(2,3,4),
>>> c(3,6,5), plotit=FALSE) ))
>>>
>>> Now you can use strsplit or substr to extract the numeric
>>> part:
>>>
>>> pv<- as.numeric(strsplit(pvstring, " ")[[1]][2])
>>>
>>> or
>>>
>>> pv<- as.numeric( substr(pvstring, nchar(pvstring) - 5,
>>> nchar(pvstring)))
>>>
>>> Peter Ehlers
>>>
>>>>
>>>> Thanks,
>>>>
>>>> Duarte
More information about the R-help
mailing list