我正在努力为我的项目更好地使用组织模式.我认为文字编程尤其适用于数据分析领域,而组织模式让我们可以做一些非常棒的文字编程.
我想你们大多数人都会同意我的看法,编写分析的工作流程与大多数其他类型的编程不同.我不只是写一个程序,我探索数据.而且,虽然其中许多探索都是死路一条,但我不想完全删除/忽略它们.我每次执行org文件时都不想重新运行它们.我也倾向于找到或开发一些有用的代码,我想把它放到一个分析模板中,但是这些块中的一些对于每个项目都不相关,我想知道如何让org-mode忽略这些我执行整个缓冲区时的块.这是一个简化的例子.
* Import
- I want org-mode to ignore import-sql.
#+srcname: import-data
#+begin_src R :exports none :noweb yes
<<import-csv>>
#+end_src
#+srcname: import-csv
#+begin_src R :exports none
data <- read.csv("foo-clean.csv")
#+end_src
#+srcname: import-sql
#+begin_src R :exports none
library(RSQLite)
blah blah blah
#+end_src
* Clean
- This is run on foo.csv, producing foo-clean.csv
- Fixes the mess of -9 and -13 to NA for my sanity.
- This only needs to be run once, and after that, reference.
- How can …Run Code Online (Sandbox Code Playgroud) 在工作中,我有一台运行R 3.1.2的Windows 7计算机.
我有一个名为packages.R的文件.在我的这个文件中,我有以下代码:
library(dplyr)
library(sqlutils)
library(RODBC)
Run Code Online (Sandbox Code Playgroud)
我的.Rprofile包含一个名为.First的函数.
.First <- function() {
source("R/packages.R")
}
Run Code Online (Sandbox Code Playgroud)
当我加载R时,我得到以下输出:
Loading required package: roxygen2
Loading required package: stringr
Loading required package: DBI
Attaching package: 'dplyr'
The following objects are masked from 'package:base':
intersect, setdiff, setequal, union
Run Code Online (Sandbox Code Playgroud)
如果仔细观察,您会看到统计数据中的过滤器未被屏蔽.
但是,如果我采用完全相同的设置,并注释掉packages.R中的库(dplyr)语句,请保存文件,然后重新启动R,然后手动重新启动....就像在手中输入一样....
library(dplyr)
Attaching package: 'dplyr'
The following object is masked from 'package:stats':
filter
The following objects are masked from 'package:base':
intersect, setdiff, setequal, union
Run Code Online (Sandbox Code Playgroud)
现在,它掩盖了package :: stats.
我不明白.我需要在dplyr中大量使用filter命令来处理这个项目,我不想输入dplyr :: filter来使用它.有人可以帮助我的弱者理解为什么这样做会这样吗?我试过在RStudio和ESS中启动R,我在两者中都得到完全相同的行为.我也尝试将dplyr移动到packages.R文件的末尾,与结果没有区别.我只想屏蔽stats :: filter.谢谢.
我有两个版本的SPSS在工作.在Windows XP上运行的SPSS 11和在Linux上运行的SPSS 20.SPSS的两个副本都可以正常工作.使用任一版本的SPSS创建的文件在其他版本的SPSS上打开而不会发生意外.IE - 我可以在Linux上使用SPSS 20创建一个.sav文件,并在Windows上的SPSS 11上打开它而不会发生任何事故.
但是,如果我使用SPSS 20创建一个.sav文件并将数据导入R或PSPP(在Linux上),我会收到一堆警告.数据似乎正确导入,但我担心警告.从SPSS 11或我发送的其他.sav文件导入.sav时,我没有看到任何警告.我公司的许多分析师都使用SPSS,因此我从不同版本的SPSS获得了SPSS文件,而且我从未见过这个警告.PSPP和R之间的警告信息几乎相同,这是有道理的.AFAIK,他们使用相同的底层库来导入数据.这是R错误:
Warning messages:
1: In read.spss("test.sav") :
test.sav: File-indicated value is different from internal value for at least one of the three system values. SYSMIS: indicated -1.79769e+308, expected -1.79769e+308; HIGHEST: 1.79769e+308, 1.79769e+308; LOWEST: -1.79769e+308, -1.79769e+308
2: In read.spss("test.sav") :
test.sav: Unrecognized record type 7, subtype 18 encountered in system file
Run Code Online (Sandbox Code Playgroud)
.sav文件非常简单.它有两列,哑和笨.两者都是整数.前两个包含两个值1.0.第二行包含两个值2.0.我可以根据要求提供文件(我没有看到任何方式将其上传到SO).如果有人想看到实际的文件,PM我和我会发给你.
dumb dumber
1.0 1.0
2.0 2.0
Run Code Online (Sandbox Code Playgroud)
思考?任何人都知道在没有在邮件列表上活着烤的情况下提交针对R的错误的最佳方法吗?:-)
编辑:我在标题行中使用了术语"错误".我会离开它,但我不应该使用这个词.下面的评论是正确的,指出我看到的消息是警告,而不是错误.但我觉得这在上述问题的正文中已经明确了.很明显,SPSS数据格式随着时间的推移而发生了变化,SPSS/IBM未能记录这些问题的根源.
我试图使用cat()作为apply()内的函数.我几乎可以让R做我想做的事,但是在回归结束时我对NULLS感到非常困惑(对我而言).这是一个愚蠢的例子,突出我所得到的.
val1 <- 1:10
val2 <- 25:34
values <- data.frame(val1, val2)
apply(values, 1, function(x) cat(x[1], x[2], fill=TRUE))
Run Code Online (Sandbox Code Playgroud)
这个"有用",因为R接受它并且它运行,但我不理解结果.
> apply(values, 1, function(x) cat(x[1], x[2], fill=TRUE))
1 25
2 26
3 27
4 28
5 29
6 30
7 31
8 32
9 33
10 34
NULL
Run Code Online (Sandbox Code Playgroud)
但是,我想得到:
> apply(values, 1, function(x) cat(x[1], x[2], fill=TRUE))
1 25
2 26
3 27
4 28
5 29
6 30
7 31
8 32
9 33
10 34
Run Code Online (Sandbox Code Playgroud)
那么,如何删除最终的NULL?
我的数据通常是中型到大型,但从未被视为“大”数据。数据几乎总是复杂的关系。出于目的,我在这里谈论的是10-50个表,总大小为1-10 GB。而已。当我处理大于此的数据时,我会将其粘贴到Postgres或SQL Server中。
总的来说,我喜欢SQLite,但是我使用的数据有很多日期/日期时间字段,并且处理SQLite中的日期字段使我很头疼,当我在R和SQLite之间来回移动数据时,我的日期经常被弄乱了。 。
我正在寻找SQLite的基于文件的替代方案,并且可以从R中轻松使用。
要么
更好的技术/程序包,用于在不影响日期的情况下将数据移入/移出SQLite和R。我的目标是停止弄乱我的约会。例如,当我使用RSQLite包中的dbWriteTable时,我的日期通常被弄乱了,使其无法使用。
我的主要工作站正在运行Ubuntu,但我在Windows主导的办公室中工作。如果建议使用SQLite的替代方案,则+++表示可在两种(或更多)两种平台上均可使用的替代方案。
我是DBA/R用户.我刚刚在一个充满SAS用户的办公室找到了一份工作,我正在努力更好地理解SAS的proc sql是如何工作的.我知道SAS包含一个关系数据库,它包括对Oracle等外部服务器运行proc sql的能力.我试图更好地了解它何时/如何决定使用数据库服务器而不是其内部数据库系统.
我见过一些非常慢的SLOW SAS代码,我的同事运行一系列proc sql命令.这些程序通常包括3-5个proc sql步骤.每个proc sql命令都会创建一个本地SAS表.他们没有使用passthrough sql.数据集很大(100万行+),这些proc sql步骤运行缓慢.大多数数据都存在于服务器上.通常有一个小表来定义我们想要查看的填充,它位于SAS数据文件中,但其他所有内容都存在于服务器上.
通过直接在服务器上运行所有查询,我已经证明了速度的显着提高.(在这种情况下是Oracle,但我认为这不重要.)通常,我必须首先将一个表上传到我的个人模式,该模式定义了我们想要检查的客户群.其他一切都在服务器上.有时我会将他们的查询合并在一起,因为它们可以在一个步骤中完成,但我不相信这就是为什么我的程序版本更快.
我认为proc sql上传了初始数据集,然后在服务器上运行第一个查询.然后,它将输出下载到本地计算机,创建本地SAS数据集.对于第二个proc sql步骤,它将在步骤1中创建的表上载回服务器,然后在服务器上运行查询.更糟糕的是,"本地"SAS数据集实际上存储在远程服务器上,而不是实际的本地机器上.这对SAS来说是不可见的,但它确实意味着我们再次在网络上复制数据.我认为SAS由于大量不必要的网络流量而运行缓慢.
问题#1 - 我对proc sql的正确理解是什么?我们是否真的在浪费尽可能多的时间,因为我认为我们正在通过网络上传和下载大型表格/数据集?
Qeustion#2 - 是否有某种方法可以控制proc sql针对服务器运行的时间与针对本地数据库运行的时间?在某些情况下,如果我们可以阻止上传/下载步骤,查询将更有效地运行.