簡體   English   中英

將類數據讀入 R

[英]Reading class data into R

我有一個C++程序,它創建(大量)我想在R中分析和可視化的數據。 每個數據點具有以下格式:

struct DataPoint {
  int iteration;  // 1...100
  int n; // starting size that may decline throughout the iterations
  std::vector<double> data1 // this vector has the size (n)
  std::vector<double> data1 // this vector has the size n*(n-1)/2 
};

每次運行包含 100 次迭代,因此每次運行都會創建 100 個這樣的數據點。 當然,我想將每個實驗重復幾次(至少 10 次,最好是 100 次)以獲得足夠的樣本量。

主要目標是比較 4 種不同的設置,因此每個實驗運行 4 次。 最后但並非最不重要的一點是,真正有趣的是(希望如此)這些設置如何根據不同的起始大小n產生不同的效果,例如 25、50、100、250、1000。

所以...我在 C++ 中擁有所有這些數據,並想在 R 中分析和可視化它,但我想知道輸出文件應該具有什么格式,以便我可以准確提取我需要的內容(例如,所有數據iteration=1n=25setting=random ) 在R 如您所見,這是很多數據,所以我應該將其拆分為幾個文件嗎? 還是我應該有一個可以一次性讀取的巨大向量?

每個數據點應該有一行嗎? 應該預先格式化(例如it1 <- c(0.1, 2.1, ...) or a simple CSV` 文件?

TLDR:將具有不同向量長度的數據導入 R 中的文件應該采用什么格式?

任何建議將不勝感激!

您可以使用您的 C++ 代碼直接輸出到 R。 Rcpp 包在這里非常有用。 假設我們編寫了一個創建 DataPoint 類型對象的函數:

#include<vector>

struct DataPoint {
  int iteration;
  int n;
  std::vector<double> data1 ;
  std::vector<double> data2 ;
};

DataPoint my_function(int iteration, int n) {
  std::vector<double> data1;
  std::vector<double> data2;
  for(int i = 0; i < n; ++i) {
    data1.push_back(static_cast<float>(i)/10);
  }
  for(int i = 0; i < (n * (n - 1))/2; ++i) {
    data2.push_back(static_cast<float>(i)/20);
  }
  DataPoint result = {iteration, n, data1, data2};
  return result;
}

要將 DataPoint 對象的輸出直接導出到 R,我們可以將其添加到文件的底部。

#include<Rcpp.h>

//[[Rcpp::export]]
Rcpp::List data_point(int iteration, int n) {

  DataPoint dp = my_function(iteration, n);
  Rcpp::List res = Rcpp::List::create(Rcpp::Named("iteration") = dp.iteration,
                                      Rcpp::Named("n") = dp.n,
                                      Rcpp::Named("data1") = dp.data1,
                                      Rcpp::Named("data2") = dp.data2);
  return res;
}

當文件來自 RStudio 時,我們將有一個名為data_point的 R 函數可用,該函數調用 C++ 代碼並將結構作為 R 列表返回。 例如:

data_point(1, 5)
$iteration
[1] 1

$n
[1] 5

$data1
[1] 0.0 0.1 0.2 0.3 0.4

$data2
 [1] 0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM