我用非常大的矢量(大小为10 ^ 7)创建了一个图.将绘图保存为pdf文件的常用方法的问题是pdf文件是一个大约10MB的非常大的文件.对于简单的时间序列图,我不想要这么大的尺寸.如何保存图表,使得尺寸足够小,最多可达100千字节?
我希望根据列总结我的数据框中的一些变量.但是我的数据框相当大(> 30,000,000行),并且使用dplyr中的汇总函数需要很长时间才能运行.R中是否有更快的方法来加速汇总过程?
我有一个格式的数据框df:
proid X1 X2 X3 X4
1 1 zz a e a
2 2 ff g z b
3 1 cd s f d
4 3 ab t e e
5 2 ta b h k
....
Run Code Online (Sandbox Code Playgroud)
我希望在它们具有相同的prodid值时连接变量X1到X4.连接的字符串用逗号分隔.所以上面的表应该给我新表:
proid X1 X2 X3 X4
1 1 zz,cd a,s e,f a,d
2 2 ff,ta g,b z,h b,k
3 3 ab t e e
....
Run Code Online (Sandbox Code Playgroud)
我使用了以下dplyr代码:
concat <- function(x){
x <- na.omit(x)
if(length(x)==0){
return(as.character(NA))
}else{
return(paste(x,collapse=","))
}
}
dg<-group_by(df,proid)
df<-summarise(dg,proid,concat(X1),concat(X2),concat(X3),concat(X4))
Run Code Online (Sandbox Code Playgroud) 根据我的理解,引入C++ C++版本(例如stdlib.h(cstdlib))的原因之一是全局命名空间不会受到污染.
但事实证明,malloc即使我没有,我也可以在全局命名空间中使用#include <stdlib.h>.
那么我为什么要#include <cstdlib>使用std::malloc呢?
(我正在使用g ++版本4.8.2)
我在R和C++中编写了以下代码,它们执行相同的算法:
a)模拟随机变量X 500次.(X值为0.9,概率为0.5,1.1值为0.5)
b)将这500个模拟值相乘得到一个值.将该值保存在容器中
c)重复10000000次,使容器具有10000000个值
R:
ptm <- proc.time()
steps <- 500
MCsize <- 10000000
a <- rbinom(MCsize,steps,0.5)
b <- rep(500,times=MCsize) - a
result <- rep(1.1,times=MCsize)^a*rep(0.9,times=MCsize)^b
proc.time()-ptm
Run Code Online (Sandbox Code Playgroud)
C++
#include <numeric>
#include <vector>
#include <iostream>
#include <random>
#include <thread>
#include <mutex>
#include <cmath>
#include <algorithm>
#include <chrono>
const size_t MCsize = 10000000;
std::mutex mutex1;
std::mutex mutex2;
unsigned seed_;
std::vector<double> cache;
void generatereturns(size_t steps, int RUNS){
mutex2.lock();
// setting seed
try{
std::mt19937 tmpgenerator(seed_);
seed_ = tmpgenerator();
std::cout << "SEED : " << …Run Code Online (Sandbox Code Playgroud) 我有一个类Outer和一个嵌套类Inner.Inner有一个方法'print',它试图访问类Outer的数据成员.代码编译得很好,但是当我尝试运行程序时出现了分段错误错误.
#include <iostream>
class Outer{
public:
Outer();
~Outer();
class Inner{
public:
Inner(Outer *parent){}
void print(){std::cout<< parent-> data <<std::endl;}
private:
Outer *parent;
};
Inner *obj;
private:
int data;
};
Outer::Outer(): data(99), obj(new Inner(this)){}
Outer::~Outer(){delete obj;}
int main(){
Outer outer;
outer.obj->print();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我不确定是什么问题,因为我已经将'this'指针传递给内部对象.
代码使用c ++ 11标志用g ++ 4.8.2编译.
为什么以下代码最后打印"无"?
class Square:
def printx(self):
print "A"
test = Square()
print test.printx()
Run Code Online (Sandbox Code Playgroud)
输出:
A
None
Run Code Online (Sandbox Code Playgroud)
为什么不只打印字母"A"?