小编h.l*_*l.m的帖子

ggplot版本的chart.PerformanceSummary

我想charts.PerformanceSummaryPerformanceAnalytics包中提供一个"ggplot版本"的基本功能,因为我认为ggplot通常更漂亮,理论上在编辑图像方面更强大.我已经相当接近,但有一些问题,我想要一些帮助.即:

  1. 减少图例占用的空间量,当它上面有10行以上时会变得可怕/丑陋...(只是线条颜色和名称就足够了)
  2. 增加Daily_Returns facet的大小以匹配chart.PerformanceSummary的大小 PerformanceAnalytics
  3. 有一个选项可以指定在Daily_Returns facet的每日回复系列中显示哪个资产,而不是总是使用第一列,这比在 charts.PerformanceSummary

如果有更好的方法来做这个可能使用gridExtra而不是方面...我不会对那些让我看起来会更好看的人感到不利...

这里的问题是美学,而且我觉得潜在易操作,因为PerformanceAnalytics已经有一个很好的工作示例,我只想让它更漂亮/更专业......

除了这个奖励积分之外,我希望能够在每个资产的图表一侧或下方某处显示与之相关的一些性能统计数据......不太确定哪里最好显示或显示此信息.

此外,如果他们对此提出建议,我并不反对人们建议清理我的代码的部分.

这是我可重复的例子......

首先生成返回数据:

require(xts)
X.stock.rtns <- xts(rnorm(1000,0.00001,0.0003), Sys.Date()-(1000:1))
Y.stock.rtns <- xts(rnorm(1000,0.00003,0.0004), Sys.Date()-(1000:1))
Z.stock.rtns <- xts(rnorm(1000,0.00005,0.0005), Sys.Date()-(1000:1))
rtn.obj <- merge(X.stock.rtns , Y.stock.rtns, Z.stock.rtns)
colnames(rtn.obj) <- c("x.stock.rtns","y.stock.rtns","z.stock.rtns")
Run Code Online (Sandbox Code Playgroud)

我想复制以下结果的图像:

require(PerformanceAnalytics)
charts.PerformanceSummary(rtn.obj, geometric=TRUE)
Run Code Online (Sandbox Code Playgroud)

目标

这是我到目前为止的尝试......

gg.charts.PerformanceSummary <- function(rtn.obj, geometric=TRUE, main="",plot=TRUE){

    # load libraries
suppressPackageStartupMessages(require(ggplot2))
suppressPackageStartupMessages(require(scales))
suppressPackageStartupMessages(require(reshape))
suppressPackageStartupMessages(require(PerformanceAnalytics))
    # create function to clean returns if having NAs in data
    clean.rtn.xts <- function(univ.rtn.xts.obj,na.replace=0){
    univ.rtn.xts.obj[is.na(univ.rtn.xts.obj)]<- na.replace
    univ.rtn.xts.obj
}
    # Create cumulative …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 performanceanalytics

7
推荐指数
2
解决办法
3904
查看次数

在有光泽的条件下创建有条件可见的侧边栏

在R和shiny,我想使用选项卡shinydashboard.仪表板通常有一个侧边栏,但是对于一个标签我想侧边栏消失,以便为页面主体提供更多的屏幕空间.

我知道有条件面板,但是当激活标签时是否可以调整侧边栏的可见性?

下面是一些模拟代码,用于设置带有三个选项卡和侧边栏的shinydashboard.

library(shiny)
library(shinydashboard)

ui <- dashboardPage(
  dashboardHeader(),
  # I would like to make the sidebar not visible if the third tab is selected...
  # something like...
  #if(input.tabs==3){dashboardSidebar(disable = TRUE)}else{dashboardSidebar()},
  dashboardSidebar(),
  if(input.tabs==3){dashboardSidebar(disable = TRUE)}else{dashboardSidebar()},
  dashboardBody(
      fluidRow(
        column(width=12,
               tabsetPanel(id='tabs'
                 tabPanel('tab1',
                          plotOutput('plot1'),value=1),
                 tabPanel('tab2',
                          plotOutput('plot2'),value=2),
                 tabPanel('tab3',
                          plotOutput('plot3'),value=3)
               )
        ))
    )
)

server <- function(input, output) { 
  output$plot1 <- renderPlot({
    out <- ggplot(data.frame(X1=rnorm(1000)),aes(X1))+
      geom_density(fill='light blue')+
      theme_minimal()
    print(out)
  })
  output$plot2 <- renderPlot({
    out <- ggplot(data.frame(X1=rnorm(1000)),aes(X1))+
      geom_density(fill='light blue')+
      theme_minimal()
      print(out)
  }) …
Run Code Online (Sandbox Code Playgroud)

r shiny

7
推荐指数
1
解决办法
2333
查看次数

来自ggplot2的构面网格中的相关值

当在ggplot2中使用facet_grid时,我希望能够为特定绘图右上角的每个网格单元的子集化数据赋予相关值.

例如,如果运行:

p <- ggplot(mtcars, aes(mpg, wt)) + geom_point()
p + facet_grid(vs ~ am, margins=TRUE)
Run Code Online (Sandbox Code Playgroud)

我希望看到某个网格中9个图中每个图的相关值.在这个例子的特定情况下,我希望每个都接近目视检查的-0.9左右.

或者也许是一个与绘图一起使用的输出表,它给出了表格中与facet_grid匹配的每个单元格的相关值...(这是不太理想的,但也是一个选项).

理想情况下,我想将此扩展到我选择的任何其他函数,以便它可以使用绘制的两个变量中的任何一个或两个来计算统计数据.

这可能吗?

提前致谢

r facet ggplot2 facets

6
推荐指数
2
解决办法
7110
查看次数

使用data.table来加速rollapply

我是data.tables的新手,如果这是一个非常基本的问题,请道歉.

我听说data.tables在处理大量数据时显着提高了计算时间,因此希望看看data.table是否能够帮助加速rollapply函数.

如果我们有一些单变量数据

xts.obj <- xts(rnorm(1e6), order.by=as.POSIXct(Sys.time()-1e6:1), tz="GMT") 
colnames(xts.obj) <- "rtns" 
Run Code Online (Sandbox Code Playgroud)

一个简单的滚动分位数,宽度为100,ap为0.75需要相当长的时间......

即代码行

xts.obj$quant.75 <- rollapply(xts.obj$rtns,width=100, FUN='quantile', p=0.75) 
Run Code Online (Sandbox Code Playgroud)

似乎永远......

data.table可以做些什么来加快速度?即是否有可以应用的通用滚动功能?

也许是一个例程,将xts对象转换为data.table对象,以加速的方式执行函数,然后在最后重新转换回xts?

提前致谢

HLM

ps我似乎没有在data.table邮件列表上得到太多响应,所以我在这里发帖,看看我是否得到了更好的回复.

pps快速使用数据帧的另一个例子data.table解决方案似乎需要比rollapply函数更长的时间,如下所示:

> x <- data.frame(x=rnorm(10000))
> x.dt <- data.table(x)
> system.time(l1 <- as.numeric(rollapply(x,width=10,FUN=quantile,p=0.75)))   
   user  system elapsed 
   2.69    0.00    2.68 
> system.time(l <- as.numeric(unlist(x.dt[,lapply(1:((nrow(x.dt))-10+1), function(i){ x.dt[i:(i+10-1),quantile(x,p=0.75)]})])))
   user  system elapsed 
  11.22    0.00   11.51 
> identical(l,l1)
[1] TRUE
Run Code Online (Sandbox Code Playgroud)

r apply dataframe xts data.table

6
推荐指数
2
解决办法
4100
查看次数

roxygenise只需一个.R文件将文件及其文档添加到包中

我创建了一个包并将其推送到github,这样devtools功能install_github()函数便于安装.即github repo文件结构是这样的,DESCRIPTION并且NAMESPACE它们/R/man包含每个函数的*.R文件和*.Rd文件的文件夹一起位于顶部.

我现在想通过添加新功能对它进行一些升级.

#'在每个新.R文件中都有函数上面的所有相关的roxygen type()文本,但是找不到roxygen2或者相关的包函数有助于读取.R文件并编写相关.Rd文件,希望这不是太难...我想我要求的是,是否可以将一个文件加热到另一个现有的包中?这样它也可以更新DESCRIPTION,NAMESPACE文件.所以我可以添加,提交并将所有这些更改推送到github上的远程仓库?

r roxygen2

6
推荐指数
1
解决办法
770
查看次数

释放R中的记忆

在R中,我试图将几组时间序列数据组合并转换为xts来自http://www.truefx.com/?page=downloads但是,文件很大并且有很多文件因此这导致了我的问题我的笔记本电脑.它们存储为csv文件,已压缩为zip文件.

下载它们并解压缩它们很容易(尽管在硬盘驱动器上占用了大量空间).

将一个月的350MB +文件加载到R中,可以合理地直接使用包中的新fread()功能data.table.

完成一些数据表转换(在函数内部),以便可以轻松读取时间戳并生成中间列.然后将数据表保存为硬盘驱动器上的RData文件,并将从工作空间中删除对数据表对象的所有引用,并gc()在删除后运行a ...但是在我的Activity Monitor中查看R会话时(运行)来自Mac)...它看起来仍然占用了近1GB的内存......而且事情看起来有点滞后......我打算同时加载几年的csv文件,转换它们可用的数据表,组合它们,然后创建一个单独的xts对象,如果只有一个月使用1GB的RAM,这似乎是不可行的.

我知道我可以顺序下载每个文件,转换它,保存它关闭R并重复,直到我有一堆RData文件,我可以加载和绑定,但希望可能有一个更有效的方式来做到这一点,删除对数据表的所有引用后,您将返回"正常"或启动RAM使用级别.清除记忆的方法有gc()哪些?任何建议将不胜感激.

garbage-collection r

6
推荐指数
1
解决办法
2648
查看次数

rowSums但保持NA值

我很确定这很简单,但似乎卡住了...我有两个xts向量已合并在一起,其中包含数值和NA.

我想获得每个索引周期的rowSums,但保持NA值.

以下是可重复的示例

set.seed(120)
dd <- xts(rnorm(100),Sys.Date()-c(100:1))
dd1 <- ifelse(dd<(-0.5),dd*-1,NA)
dd2 <- ifelse((dd^2)>0.5,dd,NA)
mm <- merge(dd1,dd2)
mm$m <- rowSums(mm,na.rm=TRUE)
tail(mm,10)

                 dd1        dd2        m
2013-08-02        NA         NA 0.000000
2013-08-03        NA         NA 0.000000
2013-08-04        NA         NA 0.000000
2013-08-05 1.2542692 -1.2542692 0.000000
2013-08-06        NA  1.3325804 1.332580
2013-08-07        NA  0.7726740 0.772674
2013-08-08 0.8158402 -0.8158402 0.000000
2013-08-09        NA  1.2292919 1.229292
2013-08-10        NA         NA 0.000000
2013-08-11        NA  0.9334900 0.933490
Run Code Online (Sandbox Code Playgroud)

在2013年8月10日的上述例子中,我希望它能NA代替0,而2013年8月2日至4日也是如此.

有关在相关场所获得NAs的优雅方式的任何建议吗?

r xts

6
推荐指数
1
解决办法
4699
查看次数

R转换为Python

我有一些我在R中编写的代码,我想将其翻译成Python,但我是python的新手,所以需要一些帮助

R代码基本上模拟250个随机法线,然后计算排序的几何平均回报,然后计算最大亏损,它执行10000次然后组合结果,如下所示.

mu <- 0.06
sigma <- 0.20
days <- 250
n <- 10000
v <- do.call(rbind,lapply(seq(n),function(y){
  rtns <- rnorm(days,mu/days,sqrt(1/days)*sigma)
  p.rtns <- cumprod(rtns+1)
  p.rtns.md <- min((p.rtns/cummax(c(1,p.rtns))[-1])-1)
  tot.rtn <- p.rtns[days]-1
  c(tot.rtn,p.rtns.md)
}))
Run Code Online (Sandbox Code Playgroud)

这是我在Python中的尝试,(如果你可以让它更短/更有说服力/更高效请建议作为答案)

import numpy as np
import pandas as pd
mu = float(0.06)
sigma = float(0.2)
days = float(250)
n = 10000
rtns = np.random.normal(loc=mu/days,scale=(((1/days)**0.5)*sigma),size=days)
rtns1 = rtns+1
prtns = rtns1.cumprod()
totrtn = prtns[len(prtns)-1] -1
h = prtns.tolist()
h.insert(0,float(1))
hdf = pd.DataFrame(prtns)/(pd.DataFrame(h).cummax()[1:len(h)]-1))[1:len(h)]]
Run Code Online (Sandbox Code Playgroud)

这就是我得到的...不太确定是否hdf正确得到p.rtns.md,并且不确定我将如何模拟这10000次.

所有建议将不胜感激......

python numpy r

6
推荐指数
1
解决办法
1582
查看次数

使用inspect元素的RSelenium和findElements

我希望得到一些帮助,试图将以下网站中的每一节圣经章节作为数据帧中的一行字符串.

我正在努力寻找正确的元素/不知道如何将findElements()与浏览器中的inspect元素结合使用.任何关于如何通常对其他位执行此操作的指示,例如交叉引用/脚注都会很棒...(注意通过单击页面顶部附近的齿轮来调整"页面选项"可以看到交叉引用

以下是我尝试过的代码.

chapter.url <- "https://www.biblegateway.com/passage/?search=Genesis+50&version=ESV"
library(RSelenium)
RSelenium:::startServer()
remDr <- remoteDriver()
remDr$open()
remDr$navigate(chapter.url)
webElem <- remDr$findElements('id','passage-text')
Run Code Online (Sandbox Code Playgroud)

r web-scraping

6
推荐指数
1
解决办法
4677
查看次数

Dygraph 图例时间-日期格式更改为包括星期几

您好,我正在使用 Rdygraphs包,并且希望能够更改图例时间日期格式以包括星期几(即“%a”)

我已经看过了dyOptionsdyLegend但看不到任何可以帮助我解决这个问题的东西......

下面是一个简单的例子......但理想情况下希望它在闪亮的应用程序中......

library(dygraphs)
library(xts)
dygraph(xts(rnorm(100),Sys.time()+seq(100)),main='random_graph')
Run Code Online (Sandbox Code Playgroud)

为了提供一些额外的细节......我希望轴和图例的格式都为:“Wed 22 Jan 2020 08:35:05”。

r dygraphs shiny

6
推荐指数
1
解决办法
701
查看次数