[英]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=1
或n=25
或setting=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.