internal Vector(IRNode node)
        {
            if (node is IRVector vector)
            {
                switch (vector.ObjectType)
                {
                case RNodeType.Integer:
                    _type = VectorType.Integer;
                    break;

                case RNodeType.Real:
                    _type = VectorType.Real;
                    break;

                case RNodeType.String:
                    _type = VectorType.String;
                    break;

                default:
                    throw new NotSupportedException();
                }

                _vector = vector;
            }
            else
            {
                throw new ArgumentException();
            }
        }
        public RVectorViewModel(IRVector rVector)
        {
            foreach (var value in rVector.Vector)
            {
                var vector = new Vector
                {
                    Value      = value,
                    BasisValue = value.GetPBasis(rVector.Basis)
                };

                RVector.Add(vector);
            }
        }
Example #3
0
        public void InitVector(IRVector rVector)
        {
            InitialList  = rVector.InitialList.GetListString("Изначальный вектор R: ");
            FilteredList = rVector.FilteredList.GetListString("НОД = 1 : ");
            ThinnedList  = rVector.ThinnedList.GetListString("Прореженный вектор R: ");
            PBasisList   = rVector.PBasisList.GetListString("Вектор R в p-ичной системе счисления: ");
            GofRVector   = rVector.GofRVector.GetListString("Вектор функций g(r): ");
            RVolume      = $"Объем вектора R: {rVector.ThinnedList.Count}";

            OnPropertyChanged(nameof(InitialList));
            OnPropertyChanged(nameof(FilteredList));
            OnPropertyChanged(nameof(ThinnedList));
            OnPropertyChanged(nameof(PBasisList));
            OnPropertyChanged(nameof(GofRVector));
            OnPropertyChanged(nameof(RVolume));
        }
        private static IRNode ReadItem(InputReader reader)
        {
            int flags = reader.ReadInt32();

            UnpackFlags(flags, out SEXPTYPE type, out int levels, out bool isObject, out bool hasAttribute, out bool hasTag);

            switch (type)
            {
            case SEXPTYPE.NILVALUE_SXP:
                return(null);

            case SEXPTYPE.EMPTYENV_SXP:
                return(RObject.EmptyEnvironment);

            case SEXPTYPE.BASEENV_SXP:
                return(RObject.BaseEnvironment);

            case SEXPTYPE.GLOBALENV_SXP:
                return(RObject.GlobalEnvironment);

            case SEXPTYPE.UNBOUNDVALUE_SXP:
                return(RObject.UnboundValue);

            case SEXPTYPE.MISSINGARG_SXP:
                return(RObject.MissingArg);

            case SEXPTYPE.BASENAMESPACE_SXP:
                return(RObject.BaseNamespace);

            case SEXPTYPE.REFSXP:
                int refIndex = ReadRefIndex(reader, flags);
                // return GetReadRef(ref_table, InRefIndex(stream, flags));
                return(null);

            case SEXPTYPE.PERSISTSXP:
                // return PersistentRestore(reader, InStringVec(reader));
                ThrowTypeNotSupported("PERSISTSXP");
                break;

            case SEXPTYPE.SYMSXP:
                return(ReadItem(reader));

            // return installChar(ReadItem(reader));
            case SEXPTYPE.PACKAGESXP:
                // return R_FindPackageEnv(InStringVec(reader));
                ThrowTypeNotSupported("PACKAGESXP");
                break;

            case SEXPTYPE.NAMESPACESXP:
                // return R_FindNamespace1(InStringVec(reader));
                ThrowTypeNotSupported("NAMESPACESXP");
                break;

            case SEXPTYPE.ENVSXP:
            {
                /*int locked = reader.ReadInt32();
                 * RObject s = allocSExp(SEXPTYPE.ENVSXP);
                 * SET_ENCLOS(s, ReadItem(reader));
                 * SET_FRAME(s, ReadItem(reader));
                 * SET_HASHTAB(s, ReadItem(reader));
                 * SET_ATTRIB(s, ReadItem(reader));
                 *
                 * if (Attribute(s) != R_NilValue && getAttrib(s, R_ClassSymbol) != R_NilValue)
                 * {
                 *  SET_OBJECTS(s, 1);
                 * }
                 *
                 * if (locked != null)
                 * {
                 *  R_LockEnvironment(s, false);
                 * }
                 *
                 * if (ENCLOS(s) == R_NilValue)
                 * {
                 *  SET_ENCLOS(s, R_BaseEnv);
                 * }
                 *
                 * return s;*/
                ThrowTypeNotSupported("ENVSXP");
                break;
            }

            case SEXPTYPE.LISTSXP:
            case SEXPTYPE.LANGSXP:
            case SEXPTYPE.CLOSXP:
            case SEXPTYPE.PROMSXP:
            case SEXPTYPE.DOTSXP:
                IRList s = new RList((RNodeType)type)
                {
                    Levels    = levels,
                    IsObject  = isObject,
                    Attribute = hasAttribute ? ReadItem(reader) : null,
                    Tag       = hasTag ? ReadItem(reader) : null,
                    Head      = ReadItem(reader),
                    Tail      = (IRList)ReadItem(reader),
                };

                /*if (type == CLOSXP && CLOENV(s) == R_NilValue) SET_CLOENV(s, R_BaseEnv);
                 * else if (type == PROMSXP && PRENV(s) == R_NilValue) SET_PRENV(s, R_BaseEnv);*/

                return(s);

            default:
                IRNode result;
                switch (type)
                {
                case SEXPTYPE.CHARSXP:
                {
                    int length = reader.ReadInt32();
                    if (length == -1)
                    {
                        return(RString.NotAvailable);
                    }
                    else
                    {
                        RString.CharEncoding encoding = RString.CharEncoding.Native;
                        if ((levels & (1 << 3)) != 0)
                        {
                            encoding = RString.CharEncoding.Utf8;
                        }
                        else if ((levels & (1 << 2)) != 0)
                        {
                            encoding = RString.CharEncoding.Latin1;
                        }
                        else if ((levels & (1 << 1)) != 0)
                        {
                            encoding = RString.CharEncoding.Bytes;
                        }

                        return(reader.ReadString(length, encoding));
                    }
                }

                case SEXPTYPE.REALSXP:
                {
                    long         length = ReadLength(reader);
                    IRRealVector vector = new RRealVector(length);
                    reader.ReadRealVector(vector);

                    result = vector;
                    break;
                }

                case SEXPTYPE.INTSXP:
                {
                    long            length = ReadLength(reader);
                    IRIntegerVector vector = new RIntegerVector(length);
                    reader.ReadIntegerVector(vector);

                    result = vector;
                    break;
                }

                case SEXPTYPE.STRSXP:
                {
                    long           length = ReadLength(reader);
                    IRStringVector vector = new RStringVector(length);
                    for (long i = 0; i < length; i++)
                    {
                        vector[i] = ((IRString)ReadItem(reader)).String;
                    }

                    result = vector;

                    break;
                }

                case SEXPTYPE.VECSXP:
                case SEXPTYPE.EXPRSXP:
                {
                    long     length = ReadLength(reader);
                    IRVector vector = RVector.AllocateVector((RNodeType)type, length);
                    for (long i = 0; i < length; i++)
                    {
                        vector[i] = ReadItem(reader);
                    }

                    result = vector;
                    break;
                }

                default:
                    throw new NotSupportedException();
                }

                if (result.ObjectType != RNodeType.Char)
                {
                    result.Levels = levels;
                }

                result.IsObject = isObject;

                if (result.ObjectType == RNodeType.Char)
                {
                    if (hasAttribute)
                    {
                        ReadItem(reader);
                    }
                }
                else
                {
                    result.Attribute = hasAttribute ? ReadItem(reader) : null;
                }

                return(result);
            }

            throw new NotSupportedException();
        }
 internal DataFrameColumn(string name, IRVector vector)
 {
     _name   = name;
     _vector = new Vector(vector);
 }
Example #6
0
 public RFactor(int length, IRVector <RString> label, bool ordered = false)
     : base(RMode.Numeric, length)
 {
     Label   = label;
     Ordered = ordered;
 }