##// END OF EJS Templates
Merge pull request #3802 from ivanov/doc-to-rst...
Merge pull request #3802 from ivanov/doc-to-rst This renames our documentation files to .rst so that it renders nicely on GitHub The docs build just fine with these changes, it'd be good to get this in before any more changes are made to the docs

File last commit:

r11128:53399198
r11764:79d36b57 merge
Show More
test_rmagic.py
122 lines | 3.8 KiB | text/x-python | PythonLexer
from StringIO import StringIO
import numpy as np
from IPython.testing.decorators import skip_without
from IPython.extensions import rmagic
from rpy2 import rinterface
import nose.tools as nt
ip = get_ipython()
ip.magic('load_ext rmagic')
def test_push():
rm = rmagic.RMagics(ip)
ip.push({'X':np.arange(5), 'Y':np.array([3,5,4,6,7])})
ip.run_line_magic('Rpush', 'X Y')
np.testing.assert_almost_equal(np.asarray(rm.r('X')), ip.user_ns['X'])
np.testing.assert_almost_equal(np.asarray(rm.r('Y')), ip.user_ns['Y'])
def test_push_localscope():
"""Test that Rpush looks for variables in the local scope first."""
ip.run_cell('''
def rmagic_addone(u):
%Rpush u
%R result = u+1
%Rpull result
return result[0]
u = 0
result = rmagic_addone(12344)
''')
result = ip.user_ns['result']
np.testing.assert_equal(result, 12345)
@skip_without('pandas')
def test_push_dataframe():
from pandas import DataFrame
rm = rmagic.RMagics(ip)
df = DataFrame([{'a': 1, 'b': 'bar'}, {'a': 5, 'b': 'foo', 'c': 20}])
ip.push({'df':df})
ip.run_line_magic('Rpush', 'df')
# This is converted to factors, which are currently converted back to Python
# as integers, so for now we test its representation in R.
sio = StringIO()
rinterface.set_writeconsole(sio.write)
try:
rm.r('print(df$b[1])')
nt.assert_in('[1] bar', sio.getvalue())
finally:
rinterface.set_writeconsole(None)
# Values come packaged in arrays, so we unbox them to test.
nt.assert_equal(rm.r('df$a[2]')[0], 5)
missing = rm.r('df$c[1]')[0]
assert np.isnan(missing), missing
def test_pull():
rm = rmagic.RMagics(ip)
rm.r('Z=c(11:20)')
ip.run_line_magic('Rpull', 'Z')
np.testing.assert_almost_equal(np.asarray(rm.r('Z')), ip.user_ns['Z'])
np.testing.assert_almost_equal(ip.user_ns['Z'], np.arange(11,21))
def test_Rconverter():
datapy= np.array([(1, 2.9, 'a'), (2, 3.5, 'b'), (3, 2.1, 'c')],
dtype=[('x', '<i4'), ('y', '<f8'), ('z', '|S1')])
ip.user_ns['datapy'] = datapy
ip.run_line_magic('Rpush', 'datapy')
# test to see if a copy is being made
v = ip.run_line_magic('Rget', '-d datapy')
w = ip.run_line_magic('Rget', '-d datapy')
np.testing.assert_almost_equal(w['x'], v['x'])
np.testing.assert_almost_equal(w['y'], v['y'])
nt.assert_true(np.all(w['z'] == v['z']))
np.testing.assert_equal(id(w.data), id(v.data))
nt.assert_equal(w.dtype, v.dtype)
ip.run_cell_magic('R', ' -d datar', 'datar=datapy')
u = ip.run_line_magic('Rget', ' -d datar')
np.testing.assert_almost_equal(u['x'], v['x'])
np.testing.assert_almost_equal(u['y'], v['y'])
nt.assert_true(np.all(u['z'] == v['z']))
np.testing.assert_equal(id(u.data), id(v.data))
nt.assert_equal(u.dtype, v.dtype)
def test_cell_magic():
ip.push({'x':np.arange(5), 'y':np.array([3,5,4,6,7])})
snippet = '''
print(summary(a))
plot(x, y, pch=23, bg='orange', cex=2)
plot(x, x)
print(summary(x))
r = resid(a)
xc = coef(a)
'''
ip.run_cell_magic('R', '-i x,y -o r,xc -w 150 -u mm a=lm(y~x)', snippet)
np.testing.assert_almost_equal(ip.user_ns['xc'], [3.2, 0.9])
np.testing.assert_almost_equal(ip.user_ns['r'], np.array([-0.2, 0.9, -1. , 0.1, 0.2]))
def test_rmagic_localscope():
ip.push({'x':0})
ip.run_line_magic('R', '-i x -o result result <-x+1')
result = ip.user_ns['result']
nt.assert_equal(result[0], 1)
ip.run_cell('''def rmagic_addone(u):
%R -i u -o result result <- u+1
return result[0]''')
ip.run_cell('result = rmagic_addone(1)')
result = ip.user_ns['result']
nt.assert_equal(result, 2)
nt.assert_raises(
NameError,
ip.run_line_magic,
"R",
"-i var_not_defined 1+1")