小编ale*_*ing的帖子

按一列分组,为每对列选择一行中最小的行

难以回答的问题.这是我想做的一个例子.我开始的一个例子:

set.seed(0)
dt <- data.table(dr1.d=rnorm(5), dr1.p=abs(rnorm(5, sd=0.08)),
                 dr2.d=rnorm(5), dr2.p=abs(rnorm(5, sd=0.08)),
                 dr3.d=rnorm(5), dr3.p=abs(rnorm(5, sd=0.08)),
                 dr4.d=rnorm(5), dr4.p=abs(rnorm(5, sd=0.08)),
                 sym = paste("sym", c(1,1,1,2,2)))
dt

      dr1.d        dr1.p      dr2.d      dr2.p       dr3.d       dr3.p      dr4.d      dr4.p   sym
1:  1.2629543 0.1231960034  0.7635935 0.03292087 -0.22426789 0.040288638 -0.2357066 0.09215294 sym 1
2: -0.3262334 0.0742853628 -0.7990092 0.02017788  0.37739565 0.086861549 -0.5428883 0.07937283 sym 1
3:  1.3297993 0.0235776357 -1.1476570 0.07135369  0.13333636 0.055276307 -0.4333103 0.03436105 sym 1
4:  1.2724293 0.0004613738 -0.2894616 0.03485466  0.80418951 0.102767948 -0.6494716 0.09906433 sym 2
5:  0.4146414 0.1923722711 -0.2992151 0.09900307 -0.05710677 …
Run Code Online (Sandbox Code Playgroud)

r data.table

9
推荐指数
1
解决办法
213
查看次数

在R中逐行绑定data.frames而不创建副本

我有一个很大的data.frames列表,需要按列成对绑定,然后在被送入预测模型之前按行绑定.由于没有值会被修改,我希望最终的data.frame指向我列表中的原始data.frames.

例如:

library(pryr)

#individual dataframes
df1 <- data.frame(a=1:1e6+0, b=1:1e6+1)
df2 <- data.frame(a=1:1e6+2, b=1:1e6+3)
df3 <- data.frame(a=1:1e6+4, b=1:1e6+5)

#each occupy 16MB
object_size(df1)  # 16 MB
object_size(df2)  # 16 MB
object_size(df3)  # 16 MB
object_size(df1, df2, df3)  # 48 MB

#will be in a named list
dfs <- list(df1=df1, df2=df2, df3=df3)

#putting into list doesn't create a copy
object_size(df1, df2, df3, dfs)  #48MB
Run Code Online (Sandbox Code Playgroud)

最终的data.frame将具有此方向(每列唯一的data.frames由列绑定,然后由行绑定):

df1, df2
df1, df3
df2, df3
Run Code Online (Sandbox Code Playgroud)

我目前正在实施这样的:

#generate unique df combinations
df_names <- names(dfs)
pairs <- combn(df_names, 2, …
Run Code Online (Sandbox Code Playgroud)

memory clone r dataframe pryr

7
推荐指数
1
解决办法
238
查看次数

Shiny:根据所选内容更新 selectizeInput 选择

我正在尝试根据当前的选择更新choicesa 。这是我的尝试(导致循环):selectizeInputselected

library(shiny)
run_ui <- function() {

  ui <- selectizeInput('words', 'Search words:', choices = NULL, selected = NULL, multiple = TRUE, options = NULL)

  server <- function(input, output, session) {

    # change 'Search words' ----
    observeEvent(input$words, {

      # handle no words (reset everything)
      if (is.null(input$words)) {
        cowords <- letters

      } else {
        # update cowords (choices for selectizeInput)
        cowords <- unique(c(input$words, sample(letters, 5)))
      }

      # update UI
      print('updating')
      updateSelectizeInput(session, 'words', choices = cowords, selected = input$words, …
Run Code Online (Sandbox Code Playgroud)

r shiny

6
推荐指数
1
解决办法
1970
查看次数

通过data.table或dplyr中的分组列选择每个数字列的绝对值的最大值

以下是我的data.frame的示例:

opts <- seq(-0.5, 0.5, 0.05)
df <- data.frame(combo1=sample(opts, 6),
                 combo2=sample(opts, 6),
                 combo3=sample(opts, 6),
                 gene=rep(c("g1", "g2", "g3"), each=2), stringsAsFactors=F)

df
   combo1 combo2 combo3 gene
1   0.40   0.50  -0.10   g1
2   0.10  -0.20  -0.35   g1
3  -0.35  -0.35   0.40   g2
4   0.00   0.10  -0.30   g2
5  -0.45  -0.10   0.05   g3
6  -0.40  -0.40  -0.05   g3
Run Code Online (Sandbox Code Playgroud)

对于每个组合,我想按基因分组,然后选择最大绝对值.我可以使用dplyr完成此任务:

library(dplyr)
df_final <- data.frame(row.names=unique(df$gene))

for (combo in colnames(df)[1:3]) {

    combo_preds <- df[, c(combo, "gene")]
    colnames(combo_preds) <- c("pred", "gene")

    combo_preds %>%
        group_by(gene) %>%
        arrange(desc(abs(pred))) %>%
        slice(1) …
Run Code Online (Sandbox Code Playgroud)

r dplyr data.table

4
推荐指数
1
解决办法
2143
查看次数

R中SQLite数据库的并行查询

我有一个大型数据库(~100Gb),我需要从中提取每个条目,对其执行一些比较,然后存储这些比较的结果。我尝试在单个 R 会话中运行并行查询,但没有成功。我可以同时运行多个 R 会话,但我正在寻找更好的方法。这是我尝试的:

library(RSQLite)
library(data.table)
library(foreach)
library(doMC)



#---------
# SETUP
#---------


#connect to db
db <- dbConnect(SQLite(), dbname="genes_drug_combos.sqlite")


#---------
# QUERY
#---------
# 856086 combos = 1309 * 109 * 6

registerDoMC(8)

#I would run 6 seperate R sessions (one for each i)
res_list <- foreach(i=1:6) %dopar% {

  a <- i*109-108
  b <- i*109

  pb  <- txtProgressBar(min=a, max=b, style=3)
  res <- list()

  for (j in a:b) {

    #get preds for drug combos
    statement   <- paste("SELECT * from combo_tstats …
Run Code Online (Sandbox Code Playgroud)

parallel-processing foreach domc rsqlite

4
推荐指数
1
解决办法
2772
查看次数

标签 统计

r ×4

data.table ×2

clone ×1

dataframe ×1

domc ×1

dplyr ×1

foreach ×1

memory ×1

parallel-processing ×1

pryr ×1

rsqlite ×1

shiny ×1