小编Mic*_*elE的帖子

如何在 Windows 中调试(逐行)Rcpp 生成的代码?

我正在尝试Rcpp在运行时调试已编译的代码。很长一段时间以来,我一直试图让它无法成功地工作。这里问了一个非常相似的问题: Debugging (line by line) of Rcpp-generated DLL under Windows这提出了同样的问题,但问题和答案都远远超出了我的理解。

这是我所拥有的:

Windows 7 Pro SP1
R 3.5
Rstudio 1.1.463 with Rcpp.
Rbuild Tools from Rstudio. (c++ compiler)
Run Code Online (Sandbox Code Playgroud)

过程:在 Rstudio File->New File->C++ File(创建一个带有 timesTwo 函数的示例文件。)

我在这个文件中添加了一个新函数:

// [[Rcpp::export]]
NumericVector timesTwo2(NumericVector x) {
  for(int ii = 0; ii <= x.size(); ii++)
  {
    x.at(ii) = x.at(ii) * 2;
  }
  return x;
}
Run Code Online (Sandbox Code Playgroud)

我在 Save 上检查了 Source 并将文件保存为 RcppTest.cpp ,它成功地获取或编译了文件。

在 Rstudio 中运行代码:

data = c(1:10)
data
[1]  1  2  3 …
Run Code Online (Sandbox Code Playgroud)

r rcpp

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

如何在Excel中的数组公式中进行逐行求和?

假设我有以下基本电子表格:

    A   B   C   D
1  -2   4   2  12
2  -1   1   0
3   0   0   0  22
4   1   1   2  12
5   2   4   6
6   3   9  12
Run Code Online (Sandbox Code Playgroud)

A 列包含从 -2 到 3 的整数。

B 列具有 a 列值的平方。

C 列是 A 和 B 的行总和,因此 C1 为 =SUM(A1:B1)。

D1 有=MAX(C1:C6),这个最大值是我需要用一个公式得到的结果。

D3 是通过 Ctrl+Shift+Enter 输入的 =MAX(SUM(A1:B6)),但它只是得到常规总和。D4 是 =MAX(A1:A6+B1:B6) 并按 ctrl+shift+enter,这样可以得到正确的结果 12。

然而,D4 的问题是我需要能够处理大动态范围,而无需输入无穷无尽的总和。假设 SUM(A1:Z1000) 将为 A1:A1000+B1:B1000+....+Z1:Z1000,这不是一个合理的公式。

那么我怎样才能做类似 =MAX(SUM(A1:Z1000)) 的事情,以便它将行 A1:Z1 到 A1000:Z1000 求和并给出最终的行宽度最大值。

我只能使用基本 Excel,因此没有辅助列,也没有 VBA 函数。

更新 …

excel vba sum excel-formula

4
推荐指数
1
解决办法
8451
查看次数

如何将 R 从 3.x 更新到 4.x,我应该这样做吗?

随着R 4.0.0和最近R 4.0.1最近发布,我想知道如何升级?

以前我使用 installR 包中的 UpdateR。

升级到 4.x 也能正常工作吗?

4.0.0 的文档指出:

在此版本 (4.0.0) 的 R 下需要(重新)安装软件包

updateR 会重新安装所有东西,如果没有,我怎样才能在合理的时间内获得要安装的软件包列表。

我不敢相信我在其他地方找不到任何 4.x 安装或更新详细信息,最重要的是 3.x 中的 4.x 中是否存在任何特定问题或限制或代码更改。

另外我用Rbuild工具RCPP。我是否需要将这些工具也更新到 4.0,是否有特殊的方法可以这样做?

r

2
推荐指数
1
解决办法
2061
查看次数

尝试滞后 xts 时间序列时出现零长度错误?

我使用以下命令生成了基本的 xts 对象。

library(quantmod)
temp1 <- getSymbols("GOOG",src = 'yahoo',from=Sys.Date()-50,to = Sys.Date(),auto.assign=FALSE)
temp2 <- temp1$GOOG.Close
head(temp2)
           GOOG.Close
2020-05-20    1406.72
2020-05-21    1402.80
2020-05-22    1410.42
2020-05-26    1417.02
2020-05-27    1417.84
2020-05-28    1416.73
lag(temp2,1)
Error in c.xts(NA_real_, c(1406.719971, 1402.800049, 1410.420044, 1417.02002,  : 
  zero-length vectors with non-zero-length index are not allowed
Run Code Online (Sandbox Code Playgroud)

据我所知 temp2 的长度不为零,所以我不明白这个错误。

同样, diff(temp2) 函数确实按预期工作。

这似乎是我最近更新到 R 4.0.1 时开始的

考虑到我确实有一个非零向量,我找不到对此错误的任何解释。

r xts

2
推荐指数
1
解决办法
2447
查看次数

如何快速检查大型XTS对象中是否存在日期(或时间)?

我在R中有一个非常大的xts对象,Data每天有10或100行和数百万行.

这是我目前的代码:

Data #my xts data set.

myDate <- "2018-02-15"
if(nrow(Data[as.character(myDate)]) > 0)
   #Run code.
Run Code Online (Sandbox Code Playgroud)

问题是1天的子集有数百万行并且需要花费大量时间,特别是如果我检查许多日期.

有没有办法可以检查日期是否存在,或者只是第一次出现日期,这样我就不会浪费时间提取大量数据?

我想在原生R中做到这一点,但Rcpp解决方案是最受欢迎的.

谢谢.

编辑:从ngm的回答我能够完成一个Rcpp解决方案.

// [[Rcpp::export]]
bool doesDateExist(const Rcpp::NumericMatrix& Data, double startDate, double maxDiff = 86400)
{
  double endDate = startDate + maxDiff;
  NumericVector time = Data.attr("index");
  for(int ii = 0; ii < Data.nrow();ii++)
  {
     if(time(ii) >= startDate)
     {
       if(time(ii) < endDate)
          return true;
       else
         return false;
     }
  }
  return false;
}
Run Code Online (Sandbox Code Playgroud)

要使用它,我有:

myDate <-as.POSIXct("2018-02-15", tz = indexTZ(Data))
if(doesDateExist(Data, myDate, 86400))
   #Run …
Run Code Online (Sandbox Code Playgroud)

r zoo rcpp xts

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

标签 统计

r ×4

rcpp ×2

xts ×2

excel ×1

excel-formula ×1

sum ×1

vba ×1

zoo ×1