3 @JavaType "org.rosuda.REngine.REXP"
\r
5 @JavaType "org.rosuda.REngine.REXPDouble"
\r
6 @FieldNames [payload]
\r
7 RExpDouble (Vector Double)
\r
8 | @JavaType "org.rosuda.REngine.REXPInteger"
\r
9 @FieldNames [payload]
\r
10 RExpInteger (Vector Integer)
\r
11 | @JavaType "org.rosuda.REngine.REXPString"
\r
12 @FieldNames [payload]
\r
13 RExpString (Vector String)
\r
14 | @JavaType "org.rosuda.REngine.REXPGenericVector"
\r
15 @FieldNames [payload]
\r
16 RExpGenericVector (Vector RExp)
\r
17 | @JavaType "org.rosuda.REngine.REXPNull"
\r
20 instance Show RExp where
\r
21 sb <+ RExpDouble v = do
\r
22 for [0..length v-1] $ \i ->
\r
23 ignore $ (if i > 0 then sb << " " else sb) <+ v!i
\r
25 sb <+ RExpInteger v = do
\r
26 for [0..length v-1] $ \i ->
\r
27 ignore $ (if i > 0 then sb << " " else sb) <+ v!i
\r
29 sb <+ RExpGenericVector v = do
\r
30 for [0..length v-1] $ \i ->
\r
31 ignore $ (if i > 0 then sb << " " else sb) <+ v!i
\r
33 sb <+ RExpNull = sb << "NULL"
\r
34 sb <+ _ = sb << "unknown"
\r
36 importJava "org.rosuda.REngine.REXP" where
\r
38 dimR :: RExp -> Maybe (Vector Integer)
\r
40 @JavaName getAttribute
\r
41 attributeRExp :: RExp -> String -> Maybe RExp
\r
45 convertRExpToDouble :: RExp -> Double
\r
49 convertRExpToVectorDouble :: RExp -> Vector Double
\r
53 convertRExpToInteger :: RExp -> Integer
\r
56 @JavaName asIntegers
\r
57 convertRExpToVectorInteger :: RExp -> Vector Integer
\r
61 convertRExpToString :: RExp -> String
\r
65 convertRExpToVectorString :: RExp -> Vector String
\r
68 @JavaName createDoubleMatrix
\r
69 convertDoubleMatrixToRExp :: Vector (Vector Double) -> RExp
\r
72 @JavaName asDoubleMatrix
\r
73 convertRExpToDoubleMatrix :: RExp -> Vector (Vector Double)
\r
77 convertRExpToList :: RExp -> [RExp]
\r
79 attributeR :: RCompatible a => RExp -> String -> Maybe a
\r
80 attributeR exp = map fromRExp . attributeRExp exp
\r
83 importJava "org.rosuda.REngine.REXPDouble" where
\r
85 convertDoubleToRExp :: Double -> RExp
\r
88 convertVectorDoubleToRExp :: Vector Double -> RExp
\r
91 importJava "org.rosuda.REngine.REXPInteger" where
\r
93 convertIntegerToRExp :: Integer -> RExp
\r
96 convertVectorIntegerToRExp :: Vector Integer -> RExp
\r
99 importJava "org.rosuda.REngine.REXPString" where
\r
101 convertStringToRExp :: String -> RExp
\r
104 convertVectorStringToRExp :: Vector String -> RExp
\r
107 importJava "org.rosuda.REngine.REXPGenericVector" where
\r
109 convertRListToRExp :: RList -> RExp
\r
112 importJava "org.rosuda.REngine.RList" where
\r
116 createRList :: [RExp] -> RList
\r
118 class RCompatible a where
\r
119 fromRExp :: RExp -> a
\r
120 toRExp :: a -> RExp
\r
122 instance RCompatible RExp where
\r
126 instance RCompatible Double where
\r
127 fromRExp = convertRExpToDouble
\r
128 toRExp = convertDoubleToRExp
\r
130 instance RCompatible (Vector Double) where
\r
131 fromRExp = convertRExpToVectorDouble
\r
132 toRExp = convertVectorDoubleToRExp
\r
134 instance RCompatible Integer where
\r
135 fromRExp = convertRExpToInteger
\r
136 toRExp = convertIntegerToRExp
\r
138 instance RCompatible (Vector Integer) where
\r
139 fromRExp = convertRExpToVectorInteger
\r
140 toRExp = convertVectorIntegerToRExp
\r
142 instance RCompatible String where
\r
143 fromRExp = convertRExpToString
\r
144 toRExp = convertStringToRExp
\r
146 instance RCompatible (Vector String) where
\r
147 fromRExp = convertRExpToVectorString
\r
148 toRExp = convertVectorStringToRExp
\r
150 instance RCompatible (Vector (Vector Double)) where
\r
151 fromRExp = convertRExpToDoubleMatrix
\r
152 toRExp = convertDoubleMatrixToRExp
\r
154 instance (RCompatible a) => RCompatible [a] where
\r
155 fromRExp = map fromRExp . convertRExpToList
\r
156 toRExp = convertRListToRExp . createRList . map toRExp