我想启动一个亚马逊EC2机器集群,用于foreach在R中使用后端.理想情况下,我可以从本地机器上的R命令行完成所有操作,从本地R会话发送相关数据和命令远程集群.
我知道AWS包将帮助完成这项任务,但我真的不知道在运行startCluster()命令后该怎么做.Segue也让我成为那里的一部分,但它不是后端foreach,它似乎不支持自定义AMI,它目前不支持Windows.还有死星包,我没有深入探讨过.
有没有其他人想出这个问题的解决方案?
我有一个大矩阵:
set.seed(1)
a <- matrix(runif(9e+07),ncol=300)
Run Code Online (Sandbox Code Playgroud)
我想对矩阵中的每一行进行排序:
> system.time(sorted <- t(apply(a,1,sort)))
user system elapsed
42.48 3.40 45.88
Run Code Online (Sandbox Code Playgroud)
我有很多RAM可以使用,但我想要一种更快的方法来执行此操作.
我用R解析了一个XML文档,例如:
library(XML)
f = system.file("exampleData", "mtcars.xml", package="XML")
doc = xmlParse(f)
Run Code Online (Sandbox Code Playgroud)
使用XPath表达式,我可以选择文档中的特定节点:
> getNodeSet(doc, "//record[@id='Mazda RX4']/text()")
[[1]]
21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
attr(,"class")
[1] "XMLNodeSet"
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何将结果转换为R字符向量:
> as.character(getNodeSet(doc, "//record[@id='Mazda RX4']/text()"))
[1] "<pointer: 0x000000000e6a7fe0>"
Run Code Online (Sandbox Code Playgroud)
如何从内部指针获取文本到C对象?
我在R中有一个大数据表:
library(data.table)
set.seed(1234)
n <- 1e+07*2
DT <- data.table(
ID=sample(1:200000, n, replace=TRUE),
Month=sample(1:12, n, replace=TRUE),
Category=sample(1:1000, n, replace=TRUE),
Qty=runif(n)*500,
key=c('ID', 'Month')
)
dim(DT)
Run Code Online (Sandbox Code Playgroud)
我想调整这个data.table,使Category成为一个列.不幸的是,由于组内的类别数量不恒定,我不能使用这个答案.
我有什么想法可以做到这一点?
/编辑:基于joran的评论和flodel的回答,我们正在重塑以下内容data.table:
agg <- DT[, list(Qty = sum(Qty)), by = c("ID", "Month", "Category")]
Run Code Online (Sandbox Code Playgroud)
这种重塑可以通过多种方式实现(到目前为止我已经得到了一些好的答案),但我真正想要的是能够很好地扩展到data.table数百万行和数百到数千种类别的东西.
我有一系列'端点',例如:
c(7,10,5,11,15)
Run Code Online (Sandbox Code Playgroud)
我希望扩展到端点之间的"经过时间"序列,例如
C(7,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,1,2,3,4,5,6,7,8-, 9,10,11,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15)
在R中最有效的方法是什么?我想象一下这个embed功能的创造性使用,但是如果不使用丑陋的for循环,我就无法完全实现.
这是执行此操作的天真方式:
expandSequence <- function(x) {
out <- x[1]
for (y in (x[-1])) {
out <- c(out,seq(1,y))
}
return(out)
}
expandSequence(c(7,10,5,11,15))
Run Code Online (Sandbox Code Playgroud) 我想循环一系列qplots或多个ggplot2情节,暂停每一个,以便我可以在继续之前检查它.
以下代码不生成图:
library(ggplot2)
par(ask=TRUE)
for(Var in names(mtcars)) {
qplot(mtcars[,Var], wt, data=mtcars, xlab=Var)
}
Run Code Online (Sandbox Code Playgroud)
但如果我在运行循环后运行此行,我会得到一个情节:
qplot(mtcars[,Var], wt, data=mtcars, xlab=Var)
Run Code Online (Sandbox Code Playgroud)
这种行为的原因是什么?如何在循环中显示图?
跟进:循环变量比使用mtcars[,Var]和更优雅xlab=Var吗?
我的Dropbox中有一个包含30,000个文件的文件夹,我无法使用Web界面删除.看来我必须下载所有30,000个文件才能告诉dropbox我真的不想要它们.
出现此错误是因为最初拥有文件的计算机已经消失,我使用选择性同步来避免将30,000个文件下载到我的所有其他计算机.
任何人都可以想到一个聪明的方法来解决这个问题吗?只是查看文件夹通常会导致Web界面崩溃.
我正在尝试编写一个R函数来将分数和混合数转换为小数.例如
mixedToFloat <- function(x){
x <- sub(' ', '+', x, fixed=TRUE)
return(unlist(lapply(x, function(x) eval(parse(text=x)))))
}
> mixedToFloat(c('1 1/2', '2 3/4', '2/3', '11 1/4', '1'))
[1] 1.5000000 2.7500000 0.6666667 11.2500000 1.0000000
Run Code Online (Sandbox Code Playgroud)
这适用于我能想到的大多数情况,但感觉有点hackish.有更标准的方法吗?
我正在寻找一种更优雅的方式来做到这一点:
#Create Dataset
set.seed(1)
x <- runif(100)
y <- runif(100)
z <- y*x
#Assign colors, based on z vector
Data <- data.frame(Order=1:length(z),z=z)
Data <- Data[order(Data$z),]
Data$col <- rainbow(length(z))
orderedcolors <- Data[order(Data$Order),'col']
#Plot x vs y, colored by z
plot(x,y,col=orderedcolors)
Run Code Online (Sandbox Code Playgroud)
基本上,我想为z矢量中的每个点指定一种颜色,我希望这些颜色在彩虹范围内从z的最低值到它的最高值变化.
r ×9
amazon-ec2 ×1
colors ×1
connection ×1
data.table ×1
dropbox ×1
dropbox-api ×1
foreach ×1
fractions ×1
ggplot2 ×1
graphics ×1
matrix ×1
row ×1
sequences ×1
sorting ×1
xml ×1
zip ×1