Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
逐行迭代导入数据帧中的向量 我尝试把从R转换到C++编码。如果你选择否决这个问题,至少要给我一个答案,这样我才能学到一些东西。我的问题是,如果我通过C++数据文件,我应该如何在C++中进行行计算?从概念上讲,我理解,一旦我通过C++数据文件,C++将把每个列当作自己的向量,我必须明确地命名。我遇到的问题是设置一个for循环,一次遍历所有向量的相同位置,从而在功能上模拟R中的行函数。我还想将此问题扩展到以下应用程序: 如何设置一个循环,循环遍历一行并返回一个向量。像R中的rowsum?在使用矩阵的高级R中有这样一个例子,但命名法不会从数据帧转换为一堆向量 如何设置一个循环,循环遍历一行并更改每行中的值,然后返回修改过的向量_R_Rcpp - Fatal编程技术网

逐行迭代导入数据帧中的向量 我尝试把从R转换到C++编码。如果你选择否决这个问题,至少要给我一个答案,这样我才能学到一些东西。我的问题是,如果我通过C++数据文件,我应该如何在C++中进行行计算?从概念上讲,我理解,一旦我通过C++数据文件,C++将把每个列当作自己的向量,我必须明确地命名。我遇到的问题是设置一个for循环,一次遍历所有向量的相同位置,从而在功能上模拟R中的行函数。我还想将此问题扩展到以下应用程序: 如何设置一个循环,循环遍历一行并返回一个向量。像R中的rowsum?在使用矩阵的高级R中有这样一个例子,但命名法不会从数据帧转换为一堆向量 如何设置一个循环,循环遍历一行并更改每行中的值,然后返回修改过的向量

逐行迭代导入数据帧中的向量 我尝试把从R转换到C++编码。如果你选择否决这个问题,至少要给我一个答案,这样我才能学到一些东西。我的问题是,如果我通过C++数据文件,我应该如何在C++中进行行计算?从概念上讲,我理解,一旦我通过C++数据文件,C++将把每个列当作自己的向量,我必须明确地命名。我遇到的问题是设置一个for循环,一次遍历所有向量的相同位置,从而在功能上模拟R中的行函数。我还想将此问题扩展到以下应用程序: 如何设置一个循环,循环遍历一行并返回一个向量。像R中的rowsum?在使用矩阵的高级R中有这样一个例子,但命名法不会从数据帧转换为一堆向量 如何设置一个循环,循环遍历一行并更改每行中的值,然后返回修改过的向量,r,rcpp,R,Rcpp,如何设置一个循环,一次遍历一系列行,从而生成一个滑动窗口函数?像这样: ## an example of a for loop in R that I want to recapitulate in c++ output <- list() for(i in 1:nrow(df)){ end_row <- i+3 df_tmp <- df[i:end_row, ] ## do some function here output[[i]] <- list

如何设置一个循环,一次遍历一系列行,从而生成一个滑动窗口函数?像这样:

## an example of a for loop in R that I want to recapitulate in c++
output <- list() 

for(i in 1:nrow(df)){
  end_row <- i+3
  df_tmp <- df[i:end_row, ]
  ## do some function here
  output[[i]] <- list(df_tmp)
}
代码> > A,我想在C++中对R中的for循环的一个例子
输出我不相信你会从C++中获得性能。但是,如果您有一组长度相等的向量(
data.frame
保证),那么您只需使用一个索引进行迭代:

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
DataFrame modifyDataFrame(DataFrame df) {

  // access the columns
  IntegerVector a = df["a"];
  IntegerVector b = df["b"];
  CharacterVector c = df["c"];
  NumericVector d = df["d"];
  CharacterVector e = df["e"];

  for(int i=0; i < df.nrow(); ++i){
    a(i) += 1;
    b(i) += 2;
    c(i) += "c";
    d(i) += 3;
    e(i) += "e";
  }
  // return a new data frame
  return DataFrame::create(_["a"]= a, _["b"]= b, _["c"]= c, _["d"]= d, _["e"]=e);
}
/*** R
a <- c(0, 2, 4, 6, 8, 10)
b <- c(1, 3, 5, 7, 9, 11)
c <- c("chr1", "chr1", "chr1", "chr1", "chr1", "chr1")
d <- c(10.2, 10.2, 4.3, 4.3, 3.4, 7.9)
e <- c("a", "t", "t", "g", "c", "a")

df <- data.frame(a, b, c, d, e)
modifyDataFrame(df)  
*/
这里我使用的是
DataFrame
类的
nrow()
方法,c.f。这使用R的C API,就像
length()
方法一样。我只是觉得使用DataFrame方法比选择一个向量来检索长度更符合逻辑。结果是一样的


至于滑动窗口,我将首先查看
RcppRoll

我们称之为Rcpp。不是rcpp,也不是rcpp。如果您发现缺少文档,欢迎您提出适当的拉取请求,也欢迎您对文档的贡献。请参阅@G.Grothendieck,我已经看到了这篇文章。它处理子设置,这非常简单。你是在建议我需要子集,然后编写一个函数来执行计算吗?@DirkEddelbuettel为命名错误感到抱歉。我已经搜索了Rcpp画廊,但没有找到我要找的。你介意发个链接吗?我一定没有正确搜索此数据库。我可以使用df.nrow()?!嗯,很简单。这是仅限Rcpp的命令吗?这会以任何方式回传给R吗?我已经读到,调用R会极大地阻碍C++的性能。如果是这样,有没有更好的方法?另外,我如何指定I+4的范围来创建“滑动”窗口式函数?@Phil\T请查看修改后的答案。我需要编写自定义函数。在“滚动窗口”框架内,我将进行大量线性代数、文本解析和类似性质的计算。RcppRoll不允许我这样做,因此我试图绕过它。我用zoo软件包写的东西慢得令人痛苦。你介意给我一个正确的方向吗?这样我就可以开始了?@Phil\T如果你想在子向量上使用Rcpp sugar函数,你只需要提取子向量。否则,可以使用双循环,一个具有输出长度,另一个具有窗口长度。有时,您还可以通过添加一个值和删除另一个值来使用单个循环(例如,滚动求和)。
#include <algorithm>
#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
DataFrame modifyDataFrame(DataFrame df) {

  // access the columns
  IntegerVector a = df["a"];
  IntegerVector b = df["b"];
  CharacterVector c = df["c"];
  IntegerVector d = df["d"];
  CharacterVector e = df["e"];

// write the for loop. I'm attempting to define a single
//position and then apply it to all vectors... 
//but no versions of this approach have worked.   

  for(int i=0; i < a.length(); ++i){

  // do some function
  }
  // return a new data frame
  return DataFrame::create(_["a"]= a, _["b"]= b, _["c"]= c, _["d"]= d, _["e"]=e);
}
#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
DataFrame modifyDataFrame(DataFrame df) {

  // access the columns
  IntegerVector a = df["a"];
  IntegerVector b = df["b"];
  CharacterVector c = df["c"];
  NumericVector d = df["d"];
  CharacterVector e = df["e"];

  for(int i=0; i < df.nrow(); ++i){
    a(i) += 1;
    b(i) += 2;
    c(i) += "c";
    d(i) += 3;
    e(i) += "e";
  }
  // return a new data frame
  return DataFrame::create(_["a"]= a, _["b"]= b, _["c"]= c, _["d"]= d, _["e"]=e);
}
/*** R
a <- c(0, 2, 4, 6, 8, 10)
b <- c(1, 3, 5, 7, 9, 11)
c <- c("chr1", "chr1", "chr1", "chr1", "chr1", "chr1")
d <- c(10.2, 10.2, 4.3, 4.3, 3.4, 7.9)
e <- c("a", "t", "t", "g", "c", "a")

df <- data.frame(a, b, c, d, e)
modifyDataFrame(df)  
*/
> modifyDataFrame(df)  
   a  b     c    d  e
1  1  3 chr1c 13.2 ae
2  3  5 chr1c 13.2 te
3  5  7 chr1c  7.3 te
4  7  9 chr1c  7.3 ge
5  9 11 chr1c  6.4 ce
6 11 13 chr1c 10.9 ae