我目前有一个程序从dat文件中获取数据并形成一个二维向量。现在,我有10个dat文件和10个不同的函数,每个函数都创建一个向量。我想知道如何缩短代码并创建一个函数,通过传递一个带有dat文件名的字符串来创建二维向量。下面我列出了几个功能。
library(xml2)
doc <- read_xml('<div id="post_message_975824" class="alt3">
<div class="quote">
some unwanted text
</div>
the text to get <abr>ABR</abr> text to get
</div>')
xml_find_all(doc, ".//div[@class='quote']") %>% xml_remove()
} 代码在这里
答案 0 :(得分:0)
基本上你这样做
std::vector<std::vector<double> > readDAT(std::string const &path)
{
std::vector<std::vector<double> > data;
const int columns = 8; // pass as a parameter?
ifstream instream(path, ios::in);
while( data_good(instream) ) // you don't provide cosmic_data_good
{
std::vector<double> line;
for(int i= 0; i < columns; i++)
{
double datum;
instream >> datum;
line.push_back(datum);
}
data.push_back(line);
}
return data;
}
文件由8个实数的列组成。因此,他们都可以用相同的例程阅读。如果列数不同,您可以将其传入并使列成为变量而不是常量,这只是一个小的变化。你还需要一些检测数据结束的方法,我想这是data_good()函数会做的。
另一个技巧是获取一个打开的istream,并在包装函数中打开该文件。然后,您可以从任何源加载.DAT数据,而不仅仅是磁盘文件。
像这样称呼
vector<vector<double> > cosmic_ray = readDAT("events_comp-h4a_10.00-10000.00PeV_zen37.00.dat");
vector<vector<double> > IC40_events = readDAT("IC40_exp.dat");
依此类推,适用于所有数据集。