我正在查看aggregateR中函数的帮助页面.我从未使用过这个便利功能,但我有一个过程应该可以帮助我加快速度.但是,我完全无法通过这个例子来理解发生了什么.
一个例子如下:
1> aggregate(state.x77, list(Region = state.region), mean)
Region Population Income Illiteracy Life Exp Murder HS Grad Frost Area
1 Northeast 5495 4570 1.000 71.26 4.722 53.97 132.78 18141
2 South 4208 4012 1.738 69.71 10.581 44.34 64.62 54605
3 North Central 4803 4611 0.700 71.77 5.275 54.52 138.83 62652
4 West 2915 4703 1.023 71.23 7.215 62.00 102.15 134463
Run Code Online (Sandbox Code Playgroud)
这里的输出正是我所期望的.所以我试着了解发生了什么.所以我看看state.x77
1> head(state.x77)
Population Income Illiteracy Life Exp Murder HS Grad Frost Area
Alabama 3615 3624 2.1 …Run Code Online (Sandbox Code Playgroud) 我在R中有一个进程,它创建了一堆对象,将它们序列化,并将它们放入纯文本文件中.这似乎是处理事情的一种非常好的方法,因为我正在使用Hadoop并且所有输出都需要通过stdin和stdout进行流式处理.
我留下的问题是如何从文本文件中读取这些对象并返回到桌面计算机上的R中.这是一个说明挑战的工作示例:
让我们创建一个tmp文件并将一个对象写入其中.这个对象只是一个向量:
outCon <- file("c:/tmp", "w")
mychars <- rawToChar(serialize(1:10, NULL, ascii=T))
cat(mychars, file=outCon)
close(outCon)
Run Code Online (Sandbox Code Playgroud)
mychars对象看起来像这样:
> mychars
[1] "A\n2\n133633\n131840\n13\n10\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n"
Run Code Online (Sandbox Code Playgroud)
当写入文本文件时,它看起来像这样:
A
2
133633
131840
13
10
1
2
3
4
5
6
7
8
9
10
Run Code Online (Sandbox Code Playgroud)
我可能忽略了一些非常明显的东西,但是如何将这个文件读回R并反序列化对象呢?当我尝试scan()或readLines()时,他们都希望将新行字符视为记录分隔符,最后我得到一个向量,其中每个元素都是文本文件中的一行.我真正想要的是一个包含文件全部内容的文本字符串.然后我可以反序列化字符串.
Perl会将换行符读回字符串,但我无法弄清楚如何覆盖R处理换行符的方式.
我有几个累积的经验密度函数,我想在彼此之上绘制,以说明两条曲线的差异.正如之前的一个问题所指出的那样,绘制ECDF的功能很简单plot(Ecdf()).当我阅读精细的手册页时,我确定我可以使用以下内容绘制多个ECDF:
require( Hmisc )
set.seed(3)
g <- c(rep(1, 20), rep(2, 20))
Ecdf(c( rnorm(20), rnorm(20)), group=g)
Run Code Online (Sandbox Code Playgroud)
然而,我的曲线有时会重叠一点,很难说哪个是哪个,就像上面产生这个图的例子一样:

我真的想让这两个CDF的颜色不同.但是,我无法弄清楚如何做到这一点.有小费吗?
我有一些工作流程,我希望R在完成脚本后暂停运行的Linux机器.我可以想到两种类似的方法来做到这一点:
system("halt")halt在R位完成后运行shell脚本.还有其他简单的方法吗?
这里的用例是针对在AWS上运行的脚本,我希望在脚本完成后实例停止,这样我就不会在作业运行后收取机器时间的费用.我用于数据分析的实例是一个EBS支持的实例,因此我不想终止它,只需暂停.从实例内部发出halt命令与从AWS控制台停止/挂起的效果相同.
我在PostgreSQL中有一个数据库,它以DATA全部大写字母命名.当我尝试使用RPostgreSQL将R data.frame写入此数据库时,如下所示:
library(RPostgreSQL)
con <- dbConnect(PostgreSQL(), host="myhost",
user= "postgres", password="myPass", dbname="DATA")
dbWriteTable(con, "test", myDf)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Error in postgresqlExecStatement(conn, statement, ...) :
RS-DBI driver: (could not Retrieve the result : ERROR: no schema has been selected to create in
)
[1] FALSE
Run Code Online (Sandbox Code Playgroud)
但是我注意到,如果我转到Postgresql并将数据库名称更改为data(小写)然后更改脚本以调用dbname="data"它然后它就像一个魅力.
我查看了rPostgreSQL的文档,并且我看到的唯一提到的情况与字段名称区分大小写有关.
所以我的问题是:
当我通过我们的公司网络访问文件时,我遇到了一些R问题变得非常迟缓的问题.所以,我回落,并做了一些测试,我感到非常震惊地发现,将R file.copy()命令MUCH比使用等效文件拷贝速度较慢system(mv ...).这是一个已知问题还是我在这里做错了什么?
这是我的测试:
我有3个文件:
large_random.txt - ~100MB medium_random.txt - ~10MB small_random.txt - ~1 MB我在我的Mac上创建了这些:
dd if=/dev/urandom of=small_random.txt bs=1048576 count=1
dd if=/dev/urandom of=medium_random.txt bs=1048576 count=10
dd if=/dev/urandom of=large_random.txt bs=1048576 count=100
Run Code Online (Sandbox Code Playgroud)
但是以下R测试都是使用在虚拟机中运行的Windows完成的.J驱车是当地的,N驱车距离酒店有700英里.
library(tictoc)
test_copy <- function(source, des){
tic('r file.copy')
file.remove(des)
file.copy(source, des )
toc()
tic('system call')
system(paste('rm', des, sep=' '))
system(paste('cp', source, des, sep=' '))
toc()
}
source <- 'J:\\tidy_examples\\dummyfiles\\small_random.txt'
des <- 'N:\\JAL\\2018\\_temp\\small_random.txt'
test_copy(source, des)
source <- 'J:\\tidy_examples\\dummyfiles\\medium_random.txt'
des <- 'N:\\JAL\\2018\\_temp\\medium_random.txt'
test_copy(source, des)
source <- …Run Code Online (Sandbox Code Playgroud) 我有三个不同长度的数据集,我想在同一个图上绘制所有三个的密度函数.这是基本图形直接:
n <- c(rnorm(10000), rnorm(10000))
a <- c(rnorm(10001), rnorm(10001, 0, 2))
p <- c(rnorm(10002), rnorm(10002, 2, .5))
plot(density(n))
lines(density(a))
lines(density(p))
Run Code Online (Sandbox Code Playgroud)
这给了我这样的东西:
alt text http://www.cerebralmastication.com/wp-content/uploads/2009/10/density.png
但我真的想用GGPLOT2做这件事,因为我想添加其他只有GGPLOT2可用的功能.看来GGPLOT真的想拿出我的经验数据并为我计算密度.它给了我一堆唇,因为我的数据集有不同的长度.那么如何在GGPLOT2中绘制这三个密度?
我试图从34个受试者中生成随机对进行实验.受试者将被分配ID#1-34.为了生成随机有序数字(1-34),我使用了以下代码:
### Getting a vector of random ordered numbers 1-34###
pairs<-sample(1:34,34,replace=F)
pairs
[1] 16 22 8 13 4 25 18 12 17 5 6 31 29 27 30 23 2 14 9 24 34 21 11
3 1 28 33 20 32 26 19 10 15 7
Run Code Online (Sandbox Code Playgroud)
我想做的是采用数字的随机排序,并将向量的每个其他元素拆分成一列,以便得到以下有序对:
partner1 partner2
16 22
8 13
. .
. .
15 7
Run Code Online (Sandbox Code Playgroud)
关于如何从向量到有序对的思考或想法?任何帮助或见解将不胜感激.
- 托马斯
昨天我研究了普通最小二乘法(OLS)与主成分分析(PCA)之间差异的一个例子.为了说明我想要显示OLS和PCA最小化的错误,所以我绘制了实际值,预测线,然后我手动(使用GIMP)绘制了一条下拉线来说明一些错误术语.如何编写R中错误行的创建?这是我用于示例的代码:
set.seed(2)
x <- 1:100
y <- 20 + 3 * x
e <- rnorm(100, 0, 60)
y <- 20 + 3 * x + e
plot(x,y)
yx.lm <- lm(y ~ x)
lines(x, predict(yx.lm), col="red")
Run Code Online (Sandbox Code Playgroud)
然后我手动添加黄线以产生以下内容:

我一直在Ubuntu中使用R来进行系统调用system(),例如启动Amazon EC2实例,管理S3上的文件等.如果我从命令行启动R,一切正常.但是如果我使用Rscript或ESS从脚本启动R,我就会遇到环境变量未设置的问题.
我认为这是一个问题,我没有正确地知道在Ubuntu中设置环境变量的位置.我认为"正确的地方"(对于"权利"的某些定义)是在〜/ .bashrc中设置用户环境变量.这是我设置的地方,export EC2_HOME=/home/jd/ec2但是当我从ESS执行R并进行系统调用时,没有运行.bashrc脚本.我已经尝试了Googing,我在Ubuntu中看到很多关于环境变量的解释,比如这个.我的膝跳反应是尝试上述线程中的每个推荐,并在其中一个选项有效时立即停止发出错误.但后来我最终得到了非标准的设置,这些设置后来让我咬了屁股.
那么我应该如何设置环境变量,以便system()在R中运行呼叫时正确设置它们?