2016-06-10 73 views
0

我想创建一个使用sqlf和sql插入的数据帧。下面是我的一个简单的代码版本R:使用sqldf并插入创建一个数据帧

d2 = data.frame(x=runif(10)) 
sqldf(c("create table d1(min_x real, max_x real)", 
     "insert into d1 select min(x), max(x) from d2", 
     "select * from d1")) 

输出是

 min_x  max_x 
1 0.05290026 0.9427019 

现在,我想在我的R代码里面使用D1,但如果我进入

d1 

[R响应

> d1 
Error: object 'd1' not found 

我已经尝试过使用SQLite和RH2 wi同样的结果。

如何在R中使用d1?

+1

可以sqldf'的'输出分配给一个对象,然后用它。 – Jota

+0

有趣的是,因为当我运行你的代码时,d1的值是24.18729。 – Miha

+0

我重新启动电脑后,今天又试了一次,结果相同。我甚至尝试在R中创建d1作为数据框,但是然后我从sqldf得到了d1已经存在的错误消息。所以我删除了代码来创建表d1并再次运行它。 SQL插入“有效”并显示所有记录,但R中的d1仅显示原始数据。在SQL d1中,应该是具有两个值的行,两者都<10。 – Eric

回答

1

sqldf,当与默认驱动程序一起使用时,SQLite将设置一个即时的内存数据库,该数据库在退出时将被销毁。保存对象的唯一方法是用指派方式:

d1 <- sqldf(c("create table d1(min_x real, max_x real)", 
    "insert into d1 select min(x), max(x) from d2", 
    "select * from d1")) 

然后你可以用它在你的R代码里面:

> print(d1) 
    min_x  max_x 
1 0.0558218 0.8966438