假设我想使用多个核运行R程序,如下所示
library(foreach)
library(doParallel)
no_cores <- detectCores() - 2
cl<-makeCluster(no_cores, outfile = "debug.txt")
registerDoParallel(cl)
result <- foreach(i = 10:100,
.combine = list,
.multicombine = TRUE) %dopar% {
set.seed(i)
a <- replicate(i, rnorm(20))
b <- replicate(i, rnorm(20))
list(x = a + b, y = a - b)
}
Run Code Online (Sandbox Code Playgroud)
但是,我发现程序运行一段时间后内存使用量增加了.我认为该程序不会释放旧对象.所以我试着用gc()as
result <- foreach(i = 10:100,
.combine = list,
.multicombine = TRUE) %dopar% {
set.seed(i)
a <- replicate(i, rnorm(20))
b <- replicate(i, rnorm(20))
list(x = a + b, y = a - …Run Code Online (Sandbox Code Playgroud) 我有一个超过120000行的data.frame,它看起来像这样
> head(mydf)
ID MONTH.YEAR VALUE
1 110 JAN. 2012 1000
2 111 JAN. 2012 1000
3 121 FEB. 2012 3000
4 131 FEB. 2012 3000
5 141 MAR. 2012 5000
6 142 MAR. 2012 4000
Run Code Online (Sandbox Code Playgroud)
我想拆分data.frame依赖于MONTH.YEAR和VALUE列,并计算每个组的行,我的期望答案应该是这样的
MONTH.YEAR VALUE count
JAN. 2012 1000 2
FEB. 2012 3000 2
MAR. 2012 5000 1
MAR. 2012 4000 1
Run Code Online (Sandbox Code Playgroud)
我试图拆分它并使用sapply计数每组的数量,这是我的代码
sp <- split(mydf, list(mydf$MONTH.YEAR, mydf$VALUE), drop=TRUE);
result <- data.frame(yearandvalue = names(sapply(sp, nrow)), count = sapply(sp, nrow))
Run Code Online (Sandbox Code Playgroud)
但我发现这个过程很慢.是否有更有效的方式来表达这一点?非常感谢你.
我想scale在做PCA之前得到我的数据,但不幸的是我发现有些列包含NA,而某些列的方差等于0,我想删除这些列.这是我的数据的一个例子
df <- data.frame( v1 = 1:10 , v2 = rep( 0 , 10 ) , v3 = sample( c( 1:3 , NA ) , 10 , repl = TRUE ), v4 = 1:10 )
Run Code Online (Sandbox Code Playgroud)
我想同时删除v2和v3列.我该如何实现呢?
我知道如何删除列包含NA,然后删除方差等于0的列.
colsd <- apply(df, 2, sd)
df2 <- df[!is.na(colsd)]
colsd2 <- apply(df2, 2, sd)
df3 <- df2[!colsd2 == 0]
Run Code Online (Sandbox Code Playgroud)
但它看起来很冗余,我只是想知道我能否实现这个更高效,也许只是在一条线上.谢谢你的回复.
我想从GEO网站上提取一些数据,我该怎么做?该网站的网址是http://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSM410750,我想得到病人的"疾病状态",我用了命令
readLines("http://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSM410750")
Run Code Online (Sandbox Code Playgroud)
要导入html,我需要的信息是在第288行.有人能帮助我吗?非常感谢你.我会很感激的.