Differences between revisions 11 and 13 (spanning 2 versions)
Revision 11 as of 2008-09-04 00:54:52
Size: 4010
Comment: Passing strings to R
Revision 13 as of 2017-03-22 02:13:52
Size: 0
Editor: mrennekamp
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
= R =

 ''"R is a language and environment for statistical computing and graphics."'' -- http://www.r-project.org/

Sage includes '''R''' and is able to invoke it. It is possible to send lines of code, invoke commands in a standardized fashion, work with results of calculations as objects and convert those objects back into python data structures. The last point is essential to write native Sage commands that use R as backend.

== Work ==
http://trac.sagemath.org/sage_trac/ticket/839
== Command Completion ==

{{{
sage: r.k[TAB]
r.kappa r.kappa_qr r.kernel r.knots r.ks_test
r.kappa_default r.kappa_tri r.kill r.kronecker r.ksmooth
r.kappa_lm r.kernapply r.kmeans r.kruskal_test
}}}

== Examples ==

=== sequence ===
{{{
sage: r.seq(1,9)

[1] 1 2 3 4 5 6 7 8 9
}}}

=== Matrix ===
Matrix {{{m}}} as Sage object and R printout - then a translation to a Sage matrix.
{{{
sage: m = r.matrix(r.seq(1,12),3)

sage: type(m)
<class 'sage.interfaces.r.RElement'>

sage: m

     [,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
}}}

argument {{{byrow=True}}}

{{{
sage: m = r.matrix(r.seq(1,12),3, byrow=True)
sage: m

     [,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
[3,] 9 10 11 12
}}}

translation:

{{{
sage: sageobj(m)
}}}
or
{{{
sage: m._sage_()

[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]

sage: type(sageobj(m))
<type 'sage.matrix.matrix_integer_dense.Matrix_integer_dense'>
}}}
 
=== t-Test ===

{{{
sage: r.t_test(r.c(1,2,3,5),r.c(1,2,4,5))
}}}
or just
{{{
sage: r.t_test([1,2,3],[1,2,4])


        Welch Two Sample t-test

data: sage6 and sage7
t = -0.2, df = 5.973, p-value = 0.8481
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -3.311938 2.811938
sample estimates:
mean of x mean of y
     2.75 3.00
}}}

and native

{{{
sage: t = ttest([1,2,3,4,5],[1,2,3,3.5,5.121])
sage: t

(0.941026372027427,
 {'DATA': {'alternative': 'two.sided',
           'conf_int': {'DATA': [-2.2140805547522402, 2.3656805547522399],
                        'conf_level': 0.94999999999999996},
           'data_name': 'sage5 and sage11',
           'estimate': {'DATA': [3, 2.9241999999999999],
                        '_Names': ['mean of x', 'mean of y']},
           'method': 'Welch Two Sample t-test',
           'null_value': {'DATA': 0, '_Names': 'difference in means'},
           'p_value': 0.941026372027427,
           'parameter': {'DATA': 7.9983864630024701, '_Names': 'df'},
           'statistic': {'DATA': 0.076336405881313296, '_Names': 't'}},
  '_Names': ['statistic',
             'parameter',
             'p.value',
             'conf.int',
             'estimate',
             'null.value',
             'alternative',
             'method',
             'data.name'],
  '_r_class': 'htest'})
sage: t[0]
0.941026372027427

sage: ttest([1,2,3,4,5],[1,2,3,3.5,5.121])[0]
0.941026372027427
}}}

=== table ===
{{{
sage: rt = r.table(x = r.c(3,3,3,1,2,3,1), y = r.c(2,1,2,2,2,1,2))

sage: rt

   x
y 1 2 3
  1 0 0 2
  2 2 1 2

sage: rt.summary()

Number of cases in table: 7
Number of factors: 2
Test for independence of all factors:
        Chisq = 2.1, df = 2, p-value = 0.3499
        Chi-squared approximation may be incorrect
}}}

== F. A. Q. ==
 .Q: "r" doesn't work!
 .A: You have probably assigned a new value to it - just assign it again: {{{r = R()}}} or any other variable you like!
 
 .Q: I cannot pass string to R function, getting errors like {{{Error: object "sage1" not found }}} or random output
 .A: Use double-quoted strings inside single-quoted strings, like {{{r.paste(1, 2, sep='"+"')}}} - maybe as you read this it's no longer needed, check http://trac.sagemath.org/sage_trac/ticket/2963