Opened 11 years ago

Last modified 8 years ago

#11436 new defect

Fix R reading files

Reported by: kcrisman Owned by: was
Priority: major Milestone: sage-6.4
Component: interfaces Keywords: r-project
Cc: jhpalmieri, jason, was Merged in:
Authors: Karl-Dieter Crisman Reviewers:
Report Upstream: N/A Work issues:
Branch: Commit:
Dependencies: Stopgaps:

Status badges

Description

The current way we configure the R Pexpect interface is to have a 1024 character cutoff to trying to read from a file.

Problem: this doesn't actually seem to work.

    sage: s = 'matrix(c(1, 1, 1, 1,' + ' '*987 + '2,2,2,2), ncol=4)' 
    sage: len(s) 
    1024 
    sage: r.eval(s) 
    '     [,1] [,2] [,3] [,4]\n[1,]    1    1    2    2\n[2,]    1    1     
2    2' 
    sage: s = 'matrix(c(1, 1, 1, 1,' + ' '*988 + '2,2,2,2), ncol=4)' 
    sage: len(s) 
    1025 
    sage: r.eval(s) 
    '' 

jhpalmieri helped track this down. See this sage-support thread for more details.

Helpful links:

It seems like everything is creating files as should be, and using the verbose option to source shows that at least something's being computed, but the result is not showing up in Sage, possibly due to misuse of "source", or "file".

Attachments (1)

trac_11436.patch (697 bytes) - added by kcrisman 11 years ago.
Based on 4.4.4, but hopefully still applies…

Download all attachments as: .zip

Change History (10)

comment:1 Changed 11 years ago by kcrisman

In fact, the file part of what we use doesn't even seem to be necessary. The option we need is print.eval=TRUE.

sage: r.eval('source(file="/Users/.../48141//interface//tmp48141",local=TRUE)')
''
sage: r.eval('source(file="/Users/.../48141//interface//tmp48141",print.eval=TRUE)')
'[1] 1 2 3'

comment:2 Changed 11 years ago by kcrisman

Yes, and this fixes the original problem too.

The only issue is that

        """
        Reads filename into the R interpreter by calling R's source function on a
        read-only file connection.

        EXAMPLES:
            sage: filename = tmp_filename()
            sage: f = open(filename, 'w')
            sage: f.write('a <- 2+2\n')
            sage: f.close()
            sage: r.read(filename)
            sage: r.get('a')
            '[1] 4'
        """

So the idea is perhaps that we do NOT see the output from such an evaluation. The problem is that then one has to know that one should assign the big computation to a name via variable <- command, and that is not obvious.

What is the best solution here? To change the reading of lines or to make the documentation REALLY clear? My preference would be to have long commands still output, just like short commands; it seems unfair to have them suddenly do this.

Changed 11 years ago by kcrisman

Based on 4.4.4, but hopefully still applies...

comment:3 Changed 11 years ago by kcrisman

  • Authors set to Karl-Dieter Crisman

Possible patch uploaded. Probably needs more documentation, but it fixed my problem locally so I'm going to bed. Suggestions welcome.

comment:4 Changed 10 years ago by kcrisman

  • Keywords r-project added

comment:5 Changed 10 years ago by kcrisman

See this sage-devel thread for what I believe is this same problem.

comment:6 Changed 9 years ago by jdemeyer

  • Milestone changed from sage-5.11 to sage-5.12

comment:7 Changed 9 years ago by vbraun_spam

  • Milestone changed from sage-6.1 to sage-6.2

comment:8 Changed 8 years ago by vbraun_spam

  • Milestone changed from sage-6.2 to sage-6.3

comment:9 Changed 8 years ago by vbraun_spam

  • Milestone changed from sage-6.3 to sage-6.4
Note: See TracTickets for help on using tickets.