小编jan*_*cki的帖子

R矢量化数组数据操作

我想会有更多的人对这个主题感兴趣.我有一些特定的任务要以最有效的方式完成.我的基础数据是: - 买入和卖出信号的时间指数 - 在时间指示的诊断上我有最近的买卖对之间的ROC(变化率):

r <- array(data = NA, 
           dim = c(5, 5), 
           dimnames = list(buy_idx = c(1,5,9,12,16), 
                           sell_idx = c(3,7,10,14,19)))
diag(r) <- c(1.04,0.97,1.07,1.21,1.1)
Run Code Online (Sandbox Code Playgroud)

任务是在每个可能的窗口(买卖对)上生成移动复合ROC,以及我目前正在解决我的任务的方式:

for(i in 2:5){
  r[1:(i-1),i] <- r[1:(i-1),i-1] * r[i,i]
}
Run Code Online (Sandbox Code Playgroud)

直到我没有在上面的某个地方循环,我的解决方案的时间是非常可接受的.有没有办法将此循环更改为矢量化解决方案?是否有任何良好的文档化教程来学习R中的矢量化思维类型? - 它比一次性解决方案更有价值!

编辑20130709:

下一个任务与先前的任务/示例高度相关.对每笔交易应用税额(税率为%值).当前解决方案

diag(r[,]) <- diag(r[,]) * ((1-(tax/100))^2)
for(i in 2:dim(r)[2]){
  r[1:(i-1),i] <- r[1:(i-1),i] * ((1-(tax/100))^(2*(i:2)))
}
Run Code Online (Sandbox Code Playgroud)

你知道更有效的方法吗?或者更正确,如果这不能解决所有问题.

arrays r vector matrix

14
推荐指数
3
解决办法
583
查看次数

R使用没有roxygen2版本的roxygen2渲染Rd

使用roxygen2的自动记录功能,虽然它很棒且有用,但它对roxygen2包版本的每次更改都很烦人.它通过在每个文件中放入roxygen2版本来更新我的所有文档文件.见下文.

% Generated by roxygen2 (4.1.1): do not edit by hand
% Please edit documentation in R/src.R
Run Code Online (Sandbox Code Playgroud)

这些更改显然不会影响代码/包,但会通过在源版本控制过程中添加噪声来影响源控件版本控制.
可以在某个地方关掉吗?

r devtools roxygen2

14
推荐指数
1
解决办法
187
查看次数

通过块范围索引(BRIN)标识符直接查询Postgres表

我有N台客户端机器.我想用BRIN索引的不同分区加载每台机器.

这需要:

  • 使用预定义的分区数创建BRIN - 等于客户端计算机的数量
  • 从客户端发送查询,这些客户端在BRIN分区标识符上使用WHERE而不是在索引列上过滤

主要目标是在将单个表从postgres加载到分布式客户端计算机时保持性能提升,在客户端之间保持相等的行数 - 如果行计数不按计算机计数除,则接近相等.

我现在可以通过维护新列来实现它,该列将我的表块分成等于客户端机器数量(或动态使用row_number() over (order by datetime) % N)的桶数.这样,它在时序和内存方面效率不高,并且BRIN索引看起来像一个很好的功能,可以加速这种用例.

3台客户端机器的最小可重现示例:

CREATE TABLE bigtable (datetime TIMESTAMPTZ, value TEXT);
INSERT INTO bigtable VALUES ('2015-12-01 00:00:00+00'::TIMESTAMPTZ, 'txt1');
INSERT INTO bigtable VALUES ('2015-12-01 05:00:00+00'::TIMESTAMPTZ, 'txt2');
INSERT INTO bigtable VALUES ('2015-12-02 02:00:00+00'::TIMESTAMPTZ, 'txt3');
INSERT INTO bigtable VALUES ('2015-12-02 03:00:00+00'::TIMESTAMPTZ, 'txt4');
INSERT INTO bigtable VALUES ('2015-12-02 05:00:00+00'::TIMESTAMPTZ, 'txt5');
INSERT INTO bigtable VALUES ('2015-12-02 16:00:00+00'::TIMESTAMPTZ, 'txt6');
INSERT INTO bigtable VALUES …
Run Code Online (Sandbox Code Playgroud)

sql postgresql postgresql-9.5

13
推荐指数
1
解决办法
941
查看次数

星型模式,规范化维度,非规范化层次结构级别密钥

给出以下星型模式表.

  • 事实上,两个维度,两个措施.

#   geog_abb  time_date amount     value
#1:       AL 2013-03-26  55.57 9113.3898
#2:       CO 2011-06-28  19.25 9846.6468
#3:       MI 2012-05-15  94.87 4762.5398
#4:       SC 2013-01-22  29.84  649.7681
#5:       ND 2014-12-03  37.05 6419.0224
Run Code Online (Sandbox Code Playgroud)
  • 地理维度,单层次结构,层次结构中的3个级别.

#   geog_abb  geog_name geog_division_name geog_region_name
#1:       AK     Alaska            Pacific             West
#2:       AL    Alabama East South Central            South
#3:       AR   Arkansas West South Central            South
#4:       AZ    Arizona           Mountain             West
#5:       CA California            Pacific             West
Run Code Online (Sandbox Code Playgroud)
  • 时间维度,两个层次结构,每个层次结构4个级别.

#    time_date time_weekday time_week time_month time_month_name time_quarter time_quarter_name time_year
#1: 2010-01-01       Friday …
Run Code Online (Sandbox Code Playgroud)

data-modeling data-warehouse star-schema database-normalization data.cube

12
推荐指数
2
解决办法
1136
查看次数

R Markdown:隐藏扰流文本(将鼠标悬停在文本元素上)

是否可以在使用R Markdown创建的.html文件中隐藏文本块?应隐藏文本元素,直到用户优先悬停在文本上(或单击按钮).要隐藏的元素不涉及代码块.目前我在<p> </ p>中包含了文字

建议通过在每行前面加上'>!来隐藏文本块,但R Studio不会识别这种'降价'方法.它只返回一个以'!'开头的文本块.我更喜欢这种简单的"悬停"方法,高于Javascript和按钮.

欢迎大家提出意见.谢谢.

r knitr r-markdown

12
推荐指数
3
解决办法
1409
查看次数

交易日期前6个月的总金额

这是我的交易数据。它显示了从from列中的帐户到to带有日期和金额信息的列中的帐户的交易

data 

id          from    to          date        amount  
<int>       <fctr>  <fctr>      <date>      <dbl>
19521       6644    6934        2005-01-01  700.0
19524       6753    8456        2005-01-01  600.0
19523       9242    9333        2005-01-01  1000.0
…           …       …           …           …
1056317     7819    7454        2010-12-31  60.2
1056318     6164    7497        2010-12-31  107.5
1056319     7533    7492        2010-12-31  164.1

Run Code Online (Sandbox Code Playgroud)

我想计算from在进行特定交易的日期之前的过去 6 个月中列中的帐户收到的交易金额,并希望将此信息保存为新列。

以下代码可以很好地在一个小数据集(例如 1000 行)中完成此操作:

data 

id          from    to          date        amount  
<int>       <fctr>  <fctr>      <date>      <dbl>
19521       6644    6934        2005-01-01  700.0
19524       6753    8456        2005-01-01  600.0 …
Run Code Online (Sandbox Code Playgroud)

performance r aggregation data.table purrr

12
推荐指数
1
解决办法
305
查看次数

动态构建查询多列的调用

如何使用字符向量变量作为参数动态查找多个字段并通过引用添加.在下面的情况下,我想查找两列并删除i.它们中的前缀.当然,他们可以覆盖具有相同名称的现有列.

library(data.table)
set.seed(1)
ID <- data.table(id = 1:3, meta = rep(1,3), key = "id")
JN <- data.table(idd = sample(ID$id, 3, FALSE), value = sample(letters, 3, FALSE), meta = rep(1,3), key = "idd")
select <- c("value","meta") # my fields to lookup
j.lkp <- call(":=", select, lapply(paste0("i.",select), as.symbol))
j.lkp
# `:=`(c("value", "meta"), list(i.value, i.meta))
ID[JN, eval(j.lkp)]
# Error in eval(expr, envir, enclos) : could not find function "i.value"
ID[JN, `:=`(c("value", "meta"), list(i.value, i.meta))]
#    id meta value
# …
Run Code Online (Sandbox Code Playgroud)

lookup r dynamic data.table

11
推荐指数
3
解决办法
386
查看次数

如何从gh-pages获取DRAT档案的下载统计信息/分析

一些背景:

R语言社区有一个名为CRAN的大包软件包.使用drat可以很容易地托管类似CRAN的私有存储库.有许多组织使用drat包和gh-pages分支来托管他们的R包.Drat只是创建一个R命令可识别的目录结构install.packages().index.html存储库结构中没有文件.

我的问题是:

如何从这些收集每个文件的下载统计信息gh-pages?我找到了" 如何将Google Analytics跟踪ID添加到GitHub页面 "的问题,但它需要一个index.html,因此无法在此处使用.

有什么建议如何解决这个问题?

GitHub是否支持此功能?

google-analytics r github github-pages drat

11
推荐指数
1
解决办法
280
查看次数

与SSE并行的前缀(累计)总和

我正在寻找有关如何与SSE进行并行前缀和的一些建议.我有兴趣在一系列整数,浮点数或双精度数上执行此操作.

我想出了两个解决方案.一个特例和一般情况.在这两种情况下,解决方案在与OpenMP并行的两次传递中在阵列上运行.对于特殊情况,我在两次传球时使用SSE.对于一般情况,我只在第二遍使用它.

我的主要问题是如何在一般案例的第一遍中使用SSE? 以下链接simd-prefix-sum-on-intel-cpu显示字节的改进,但不是32位数据类型.

特殊情况称为特殊情况的原因是它要求数组采用特殊格式.例如,假设a浮点数组中只有16个元素.然后,如果数组像这样重新排列(结构数组结构):

a[0] a[1] ...a[15] -> a[0] a[4] a[8] a[12] a[1] a[5] a[9] a[13]...a[3] a[7] a[11] a[15]
Run Code Online (Sandbox Code Playgroud)

SSE垂直总和可用于两个通道.但是,只有当数组已经采用特殊格式并且输出可以以特殊格式使用时,这才有效.否则,必须在输入和输出上进行昂贵的重新排列,这将使其比一般情况慢得多.

也许我应该考虑一个不同的前缀和算法(例如二叉树)?

一般情况的代码:

void prefix_sum_omp_sse(double a[], double s[], int n) {
    double *suma;
    #pragma omp parallel
    {
        const int ithread = omp_get_thread_num();
        const int nthreads = omp_get_num_threads();
        #pragma omp single
        {
            suma = new double[nthreads + 1];
            suma[0] = 0;
        }
        double sum = 0;
        #pragma omp for schedule(static) nowait //first parallel pass
        for (int i …
Run Code Online (Sandbox Code Playgroud)

c sse sum openmp

10
推荐指数
1
解决办法
3633
查看次数

如何防止具有重复索引/键的行附加到data.frame?

我有数据,其中两个变量("ManufactererId"和"ProductId")的组合构成唯一的键/标识符.数据如下所示:

my.data <- data.frame(ManufactererId = c(1, 1, 2, 2),
                      ProductId = c(1, 2, 1, 7),
                      Price = c(12.99, 149.00, 0.99, 3.99))
my.data
#   ManufactererId ProductId  Price
# 1              1         1  12.99
# 2              1         2 149.00
# 3              2         1   0.99
# 4              2         7   3.99
Run Code Online (Sandbox Code Playgroud)

我想确保我不会意外地添加另一行ManufactererId - ProductId等于表中已存在的行(就像数据库表上的唯一约束一样).

也就是说,如果我尝试向我的数据框添加ManufactererId = 2和ProductId = 7的行:

my.data <- rbind(my.data, data.frame(ManufactererId = 2, ProductId = 7, Price = 120.00))
Run Code Online (Sandbox Code Playgroud)

......它应该失败并出错.怎么能实现这一目标?

或者我应该使用不同的数据类型?

r uniqueidentifier unique-key dataframe data.table

10
推荐指数
2
解决办法
376
查看次数