예제 #1
0
        private static IConverter ConvertFromNumericalVector(SymbolicExpression sexp)
        {
            var isPosixct  = sexp.IsPosixct();
            var isDiffTime = !isPosixct && sexp.IsDiffTime();

            if (sexp.IsMatrix())
            {
                if (isPosixct)
                {
                    return(new PosixMatrixConverter(sexp.AsNumericMatrix()));
                }
                if (isDiffTime)
                {
                    return(new NumericDiffTimeMatrixConverter(sexp.AsNumericMatrix()));
                }

                return(new MatrixConverter <double>(sexp.AsNumericMatrix()));
            }

            if (isPosixct)
            {
                return(new PosixVectorConverter(sexp.AsNumeric()));
            }
            if (isDiffTime)
            {
                return(new NumericDiffTimeVectorConverter(sexp.AsNumeric()));
            }

            return(new VectorConverter <double>(sexp.AsNumeric()));
        }
예제 #2
0
        private static Dictionary <string, object[]?> MatrixToDictionary(SymbolicExpression sexp)
        {
            RequireTrue(sexp.IsMatrix());

            switch (sexp.Type)
            {
            case SymbolicExpressionType.CharacterVector:
                var characterMatrix = sexp.AsCharacterMatrix();
                return(ArrayToDictionary <string, object>(characterMatrix.ToArray(), characterMatrix.ColumnNames));

            case SymbolicExpressionType.IntegerVector:
                var integerMatrix = sexp.AsIntegerMatrix();
                return(ArrayToDictionary <int, object>(integerMatrix.ToArray(), integerMatrix.ColumnNames));

            case SymbolicExpressionType.LogicalVector:
                var logicalMatrix = sexp.AsLogicalMatrix();
                return(ArrayToDictionary <bool, object>(logicalMatrix.ToArray(), logicalMatrix.ColumnNames));

            case SymbolicExpressionType.NumericVector:
                var numericMatrix = sexp.AsNumericMatrix();
                return(ArrayToDictionary <double, object>(numericMatrix.ToArray(), numericMatrix.ColumnNames));

            default: throw new InvalidOperationException($"Unsupported matrix type: {sexp.Type}");
            }
        }