simbabest

  •  
  • 2014年11月28日
  • 注册于 2013年5月17日

  • > mxts<-as.xts(realData[,c(2,3,4)],order.by =realData$Date)
    > mxts
    Ret Ret1 Ret2
    2002-07-01 -0.011060737 1.17604e-04 1.08934e-04
    2002-07-02 0.006543289 9.05658e-05 8.72709e-05
    2002-07-03 0.003454995 5.51476e-05 5.65160e-05
    2002-07-04 -0.010325115 6.18436e-05 6.01633e-05
    2002-07-05 0.005268793 7.49235e-05 4.92564e-05
    > class(mxts)
    [1] "xts" "zoo"
    >


    第一列为日期列 非numeric类型 不能做第一个参数传递进去,字符也一样
    另外也需要指定order.by
    或者 mxts<-as.xts(realData[,-1],order.by =realData$Date) 也可以 -1表示不要第一列
  • 版主 别留情, 直接删掉

    这种消息到处泛滥,有必要在这里保留?

  • 回复 第1楼 的 fountainer:

    <br />
    > require(xts)<br />
    > x<-c(235,263,345)<br />
    > dt_x<-c('2013-04-05','2013-04-06','2013-04-10')<br />
    > xse<-xts(x,as.Date(dt))<br />
    > y<-c(NA,NA,NA)<br />
    > dt_y<-c('2013-04-07','2013-04-08','2013-04-09')<br />
    > yse<-xts(y,as.Date(dt_y))<br />
    > nse<-rbind.xts(xse,yse)<br />
    警告信息:<br />
    In rbind.xts(xse, yse) : mismatched types: converting objects to numeric<br />
    > nse<br />
               [,1]<br />
    2013-04-05  235<br />
    2013-04-06  263<br />
    2013-04-07   NA<br />
    2013-04-08   NA<br />
    2013-04-09   NA<br />
    2013-04-10  345<br />
    > nse<-na.locf(nse)<br />
    > nse<br />
               [,1]<br />
    2013-04-05  235<br />
    2013-04-06  263<br />
    2013-04-07  263<br />
    2013-04-08  263<br />
    2013-04-09  263<br />
    2013-04-10  345<br />
    
    </p>

    贴了这么多无用代码,其实我想回答的就是

    xts.rbind 和 na.locf

    我还可以再啰嗦两句:

    na.approx(x) #对缺失值进行线性插值

    na.spline(x) #对缺失值进行样条插值

    na.locf(x) #末次观测值结转法

  • 回复 第12楼 的 cloud wei:运行了一下demo 确实还不错啊.不知道 能否打开现有的文档 进行特定部分的修改.

  • 回复 第10楼 的 肖楠:

    大神的世界 好难懂 [s:12]

    求解释 ,直接调用paste0 和do.call 调用 居然不一样:

    <br />
    > z<-expand.grid(c(1,2,3),c(1,2))<br />
    > z<br />
      Var1 Var2<br />
    1    1    1<br />
    2    2    1<br />
    3    3    1<br />
    4    1    2<br />
    5    2    2<br />
    6    3    2<br />
    > paste0(z)<br />
    [1] "c(1, 2, 3, 1, 2, 3)" "c(1, 1, 1, 2, 2, 2)"<br />
    > do.call(paste0,z)<br />
    [1] "11" "21" "31" "12" "22" "32"<br />
    


    另外 ,追问一句 outer函数 到底是向量化运算不?上面贴了代码 但我看不出来..
    </p>
  • 回复 第5楼 的 zjgslxh:

    outer 函数:

    <br />
    function (X, Y, FUN = "*", ...)<br />
    {<br />
        if (is.array(X)) {<br />
            dX <- dim(X)<br />
            nx <- dimnames(X)<br />
            no.nx <- is.null(nx)<br />
        }<br />
        else {<br />
            dX <- length(X)<br />
            no.nx <- is.null(names(X))<br />
            if (!no.nx)<br />
                nx <- list(names(X))<br />
        }<br />
        if (is.array(Y)) {<br />
            dY <- dim(Y)<br />
            ny <- dimnames(Y)<br />
            no.ny <- is.null(ny)<br />
        }<br />
        else {<br />
            dY <- length(Y)<br />
            no.ny <- is.null(names(Y))<br />
            if (!no.ny)<br />
                ny <- list(names(Y))<br />
        }<br />
        if (is.character(FUN) && FUN == "*") {<br />
            robj <- as.vector(X) %*% t(as.vector(Y))<br />
            dim(robj) <- c(dX, dY)<br />
        }<br />
        else {<br />
            FUN <- match.fun(FUN)<br />
            Y <- rep(Y, rep.int(length(X), length(Y)))<br />
            if (length(X))<br />
                X <- rep(X, times = ceiling(length(Y)/length(X)))<br />
            robj <- FUN(X, Y, ...)<br />
            dim(robj) <- c(dX, dY)<br />
        }<br />
        if (no.nx)<br />
            nx <- vector("list", length(dX))<br />
        else if (no.ny)<br />
            ny <- vector("list", length(dY))<br />
        if (!(no.nx && no.ny))<br />
            dimnames(robj) <- c(nx, ny)<br />
        robj<br />
    }<br />
    <bytecode: 0x07f2d728><br />
    <environment: namespace:base><br />
    


    不好意思,知识浅薄 我也看不粗来 它是不是向量化运算.
    </p>
  • 显然 这里要求可以重复的 .

    比如取 aaa ,aab ,abb,aba,bbb 都是可以的

    combn 是排列组合 ,不放回的取样.

    弄个小点的样本说明问题

    <br />
    > combn(c('a','b','c','d','e'),3)<br />
         [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]<br />
    [1,] "a"  "a"  "a"  "a"  "a"  "a"  "b"  "b"  "b"  "c"<br />
    [2,] "b"  "b"  "b"  "c"  "c"  "d"  "c"  "c"  "d"  "d"<br />
    [3,] "c"  "d"  "e"  "d"  "e"  "e"  "d"  "e"  "e"  "e"<br />
    
    </p>
  • 是的 要避免使用循环,尽可能使用R内置的向量化运算函数.outer应该就是.

    如何把 result [36x36x36 的一个超大矩阵.] 按元素 取出来 按行写入到文本文件呢 ?

  • 很显然你没装Java 或者没有设置Java的环境变量.

  • 你的感觉是对的,真心有救了;再次表示感谢.

    看来以后只能是

    中文输入的地方就用:

    iconv("中文","CP936","UTF8")


    中文输出的地方就用:
    iconv("乱码","UTF8","CP936")


    还好有这个转码函数.要不然windows用户没法混了
    </p>
  • 感谢回复,按options的方法 ,再试一次:

    <br />
    > options(encoding = "UTF-8")<br />
    > source("calc_index.R")<br />
    
    </p>

    1.执行查询函数 中文参数:

    <br />
    > getIndexComp('3D概念')<br />
    [1] "select blkname,secode from indst_classify where blkname like '3D概念%' ORDER BY secode limit 10"<br />
    错误于postgresqlExecStatement(conn, statement, ...) :<br />
      RS-DBI driver: (could not Retrieve the result : ERROR:  invalid byte sequence for encoding "UTF8": 0xb8<br />
    )<br />
    
    </p>

    2 执行查询函数 非中文参数.

    <br />
    > getIndexComp('3D')<br />
    [1] "select blkname,secode from indst_classify where blkname like '3D%' ORDER BY secode limit 10"<br />
        blkname   secode<br />
    1  3D鎵撳嵃 SH600071<br />
    2  3D鎵撳嵃 SH600288<br />
    3  3D鎵撳嵃 SH600765<br />
    4  3D鎵撳嵃 SH600806<br />
    5  3D鎵撳嵃 SH601313<br />
    6  3D鎵撳嵃 SH603002<br />
    7  3D鎵撳嵃 SZ000988<br />
    8  3D鎵撳嵃 SZ002008<br />
    9  3D鎵撳嵃 SZ002117<br />
    10 3D鎵撳嵃 SZ002189<br />
    


    3.执行查询函数 乱码中文的参数.将错就错
    <br />
    > getIndexComp('3D鎵撳嵃')<br />
    [1] "select blkname,secode from indst_classify where blkname like '3D鎵撳嵃%' ORDER BY secode limit 10"<br />
        blkname   secode<br />
    1  3D鎵撳嵃 SH600071<br />
    2  3D鎵撳嵃 SH600288<br />
    3  3D鎵撳嵃 SH600765<br />
    4  3D鎵撳嵃 SH600806<br />
    5  3D鎵撳嵃 SH601313<br />
    6  3D鎵撳嵃 SH603002<br />
    7  3D鎵撳嵃 SZ000988<br />
    8  3D鎵撳嵃 SZ002008<br />
    9  3D鎵撳嵃 SZ002117<br />
    10 3D鎵撳嵃 SZ002189<br />
    
    </p>

    是不是已经无语了?

    对了再查看一次 sessionInfo()

    <br />
    > sessionInfo()<br />
    R version 2.15.3 (2013-03-01)<br />
    Platform: i386-w64-mingw32/i386 (32-bit)</p>
    <p>locale:<br />
    [1] LC_COLLATE=Chinese (Simplified)_People's Republic of China.936<br />
    [2] LC_CTYPE=Chinese (Simplified)_People's Republic of China.936<br />
    [3] LC_MONETARY=Chinese (Simplified)_People's Republic of China.936<br />
    [4] LC_NUMERIC=C<br />
    [5] LC_TIME=Chinese (Simplified)_People's Republic of China.936    </p>
    <p>attached base packages:<br />
    [1] stats     graphics  grDevices utils     datasets<br />
    [6] methods   base     </p>
    <p>other attached packages:<br />
    [1] RPostgreSQL_0.4 DBI_0.2-7<br />
    
    </p>
  • 本人在使用RPostgreSQL的过程中,一直没有解决一个关于中文乱码的问题

    问题描述:

    从PostgreSQL的表中查询出的中文字段都是乱码, 另外 用中文字符 当参数 生成where条件 去查PostgreSQL的数据也是失败 .

    PostgreSQL中 的数据库是 UTF-8 编码

    win7 R 3.0.1 sessionInfo() 信息:

    sion 3.0.0 (2013-04-03)

    Platform: i386-w64-mingw32/i386 (32-bit)

    locale:

    [1] LC_COLLATE=Chinese (Simplified)_People's Republic of China.936

    [2] LC_CTYPE=Chinese (Simplified)_People's Republic of China.936

    [3] LC_MONETARY=Chinese (Simplified)_People's Republic of China.936

    [4] LC_NUMERIC=C

    [5] LC_TIME=Chinese (Simplified)_People's Republic of China.936

    求助如何解决.

    ps. 我在ubuntu中也试过 , 并不存在乱码的问题.

  • 回复 第5楼 的 doctorjxd:过了5天 ,自己又来推翻自己 赞一个,这样的人必然在不断进步.

  • 谢老大 早上好.

    一针见血的指明问题了

    的确是中文的问题,我也正在查阅资料琢磨解决.

    我是这几天才刚用上knitr 并且之前的tex基础几乎为0,在cos上看见别人类似的问题,还没仔细分析就胡球回答一通 惭愧了.

    BTW,我主要是在使用 blotter+quantmod+quantstrat等几个包

    主要目的是想用您的knitr包帮助动态生成 证券交易的策略验证报告.

    两个月前正式接触R.不过呢我有两年的Python编程经验.

    这方面 请谢老大 以后多指点.[s:13]

  • 同情你 没人回复.

    我也遇到跟你一样的问题.在Rsutdio中运行

    knit2pdf("testLyx.Rnw") 
    失败

    也不是全失败 至少tex中间文件还是正确生成了.</p>

    于是手动去运行..MikTex 的bin目录texi2dvi.exe

    texi2dvi knitr-minimal.tex --pdf


    结果就能成功生成pdf

    如下:

    Output written on knitr-minimal.pdf (1 page, 57301 bytes).

    Transcript written on knitr-minimal.log.</p>

    最后 我回到原生的Rgui中运行 啥问题也没发生 一切正常

    <br />
    >knit2pdf("knitr-minimal.Rnw")</p>
    <p>|<br />
    |.................................................................| 100%<br />
    ordinary text without R code</p>
    <p>output file: knitr-minimal.tex</p>
    <p>[1] "knitr-minimal.pdf"<br />
    
    </p>

    初步结论: 是Rstudio的问题.别太放心上了

    最后赞一句 谢老大的knitr包真是个天才的设计.

  • 回复 第17楼 的 yangyuancn:rpy,rpy2,pyper 三个包 都可以实现在python中使用R. rpy2安装起来很麻烦,建议直接尝试pyper.