我注意到,一旦提交到传入(ftp://cran.r-project.org/incoming),包名称将收到以下后缀.save,.pending和.noemail.然后,包裹从传入中消失.我想下一步是CRAN维护者把它放在主服务器上(http://cran.r-project.org/src/contrib/ http://cran.r-project.org/web/packages/)然后它传播到镜子.
我的问题:
(1)有人可以确认步骤并提供详细信息.特别是在包从传入消失后发生的事情(没有找到检查该步骤的状态的方法)
(2)每个步骤平均需要多长时间?
谢谢!
当串行执行随机森林时,它在我的系统上使用8GB的RAM,当并行执行它时,它使用超过两倍的RAM(18GB).如果并行执行此操作,如何将其保持在8GB?这是代码:
install.packages('foreach')
install.packages('doSMP')
install.packages('randomForest')
library('foreach')
library('doSMP')
library('randomForest')
NbrOfCores <- 8
workers <- startWorkers(NbrOfCores) # number of cores
registerDoSMP(workers)
getDoParName() # check name of parallel backend
getDoParVersion() # check version of parallel backend
getDoParWorkers() # check number of workers
#creating data and setting options for random forests
#if your run this please adapt it so it won't crash your system! This amount of data uses up to 18GB of RAM.
x <- matrix(runif(500000), 100000)
y <- gl(2, 50000)
#options
set.seed(1)
ntree=1000 …Run Code Online (Sandbox Code Playgroud) 我需要加速的缓慢工作代码(函数rbf来自kernlab包)的简化示例:
install.packages('kernlab')
library('kernlab')
rbf <- rbfdot(sigma=1)
test <- matrix(NaN,nrow=5,ncol=10)
for (i in 1:5) {
for (j in 1:10) { test[i,j] <- rbf(i,j)}
}
Run Code Online (Sandbox Code Playgroud)
我试过outer()但它不起作用,因为该rbf函数没有返回所需的长度(50).我需要加快这个代码的速度,因为我有大量的数据.我已经读过,矢量化将是加速这一过程的圣杯,但我不知道如何.
你能指点我正确的方向吗?
我想并行化一个名为unparallelizedfnc的函数.该函数调用其他四个函数(需要很长时间才能计算)并存储结果.最后结果合并.考虑我的功能的玩具示例(当然这些不是我称之为的四个真实功能,仅用于演示).
如何在具有多个内核的计算机上并行化result1,result2,result3和result4的计算?我希望它可以在Windows,Linux和Mac OSX上运行.在这种情况下,不需要对并行化版本进行基准测试(由于开销会慢一些,但在我的实际代码中它会更快).
如果四个结果是相同的函数(但具有不同的数据),我可以使用并行for循环(foreach)或并行应用,但在这种情况下,函数是不同的.
unparallelizedfnc <- function(x) {
result1 <- sum(x)
result2 <- median(x)
result3 <- min(x)
result4 <- max(x)
result <- mean(c(result1,result2,result3, result4))
result
}
unparallelizedfnc(rnorm(100000))
Run Code Online (Sandbox Code Playgroud) 使用apply系列中的函数可以轻松地在R中加速循环.如何在下面的代码中使用apply函数来加快速度?注意,在循环内,在每次迭代时,置换一列并将函数应用于新数据帧(即,具有一列置换的初始数据帧).我似乎无法申请工作,因为必须在循环内构建新的数据框.
#x <- data.frame(a=1:10,b=11:20,c=21:30) #small example
x <- data.frame(matrix(runif(50*100),nrow=50,ncol=100)) #larger example
y <- rowMeans(x)
start <- Sys.time()
totaldiff <- numeric()
for (i in 1:ncol(x)){
x.after <- x
x.after[,i] <- sample(x[,i])
diff <- abs(y-rowMeans(x.after))
totaldiff[i] <- sum(diff)
}
colnames(x)[which.max(totaldiff)]
Sys.time() - start
Run Code Online (Sandbox Code Playgroud) 考虑这个清单:
l <- list(a=1:10,b=1:10,c=rep(0,10),d=11:20)
Run Code Online (Sandbox Code Playgroud)
然后考虑这个示例代码(代表真正的更大代码).它只是根据名称选择列表中的正确元素.
参数:
object:最多包含四个元素的列表(有时少于四个).元素始终称为a,b,c和d,但并不总是以相同的顺序出现在列表中.
x:要选择的元素的名称(即a,b,c或d)
slct <- function(object,x) {
if (x=="a") {
object$a
} else if (x=="b") {
object$b
} else if (x=="c") {
object$c
} else if (x=="d") {
object$d
}
}
slct(l,"d")
Run Code Online (Sandbox Code Playgroud)
当你不仅仅有4个元素,而是数百个元素时,这种方法变得无法实现.此外,我无法根据数字(例如,对象[[1]])进行选择,因为每次元素的顺序不同.那么如何缩短上面的代码呢?
我在考虑SAS中的宏观方法,但当然这在R中不起作用.
slct <- function(object,x) {
object$x
}
object$a
slct(object=l,x="a")
Run Code Online (Sandbox Code Playgroud)
我有什么可以替换对象$ x以使其工作,但代码少于上面的代码?