小编Axe*_*man的帖子

维恩图用R?

除了limma包之外,还有用于在R中进行维恩图的其他包装.

有人有提示吗?

这里有关于用limma包做维恩图的一些注意事项.

r venn-diagram

27
推荐指数
6
解决办法
3万
查看次数

加入树状图和热图

我有heatmap(来自一组样本的基因表达):

set.seed(10)
mat <- matrix(rnorm(24*10,mean=1,sd=2),nrow=24,ncol=10,dimnames=list(paste("g",1:24,sep=""),paste("sample",1:10,sep="")))
dend <- as.dendrogram(hclust(dist(mat)))
row.ord <- order.dendrogram(dend)
mat <- matrix(mat[row.ord,],nrow=24,ncol=10,dimnames=list(rownames(mat)[row.ord],colnames(mat)))
mat.df <- reshape2::melt(mat,value.name="expr",varnames=c("gene","sample"))

require(ggplot2)
map1.plot <- ggplot(mat.df,aes(x=sample,y=gene))+geom_tile(aes(fill=expr))+scale_fill_gradient2("expr",high="darkred",low="darkblue")+scale_y_discrete(position="right")+
  theme_bw()+theme(plot.margin=unit(c(1,1,1,-1),"cm"),legend.key=element_blank(),legend.position="right",axis.text.y=element_blank(),axis.ticks.y=element_blank(),panel.border=element_blank(),strip.background=element_blank(),axis.text.x=element_text(angle=45,hjust=1,vjust=1),legend.text=element_text(size=5),legend.title=element_text(size=8),legend.key.size=unit(0.4,"cm"))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

(由于plot.margin我正在使用的论据,左侧被切断,但我需要这个,如下所示).

然后,我prunedendrogram根据深度截止值来获得较少的集群(即,只有深深的分裂),并做一些编辑所产生dendrogram有它绘制他们的方式,我希望它:

depth.cutoff <- 11
dend <- cut(dend,h=depth.cutoff)$upper
require(dendextend)
gg.dend <- as.ggdend(dend)
leaf.heights <- dplyr::filter(gg.dend$nodes,!is.na(leaf))$height
leaf.seqments.idx <- which(gg.dend$segments$yend %in% leaf.heights)
gg.dend$segments$yend[leaf.seqments.idx] <- max(gg.dend$segments$yend[leaf.seqments.idx])
gg.dend$segments$col[leaf.seqments.idx] <- "black"
gg.dend$labels$label <- 1:nrow(gg.dend$labels)
gg.dend$labels$y <- max(gg.dend$segments$yend[leaf.seqments.idx])
gg.dend$labels$x <- gg.dend$segments$x[leaf.seqments.idx]
gg.dend$labels$col <- "black"
dend1.plot <- ggplot(gg.dend,labels=F)+scale_y_reverse()+coord_flip()+theme(plot.margin=unit(c(1,-3,1,1),"cm"))+annotate("text",size=5,hjust=0,x=gg.dend$label$x,y=gg.dend$label$y,label=gg.dend$label$label,colour=gg.dend$label$col)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 我用cowplot's将它们绘制在一起plot_grid:

require(cowplot)
plot_grid(dend1.plot,map1.plot,align='h',rel_widths=c(0.5,1)) …
Run Code Online (Sandbox Code Playgroud)

r dendrogram heatmap ggplot2 cowplot

24
推荐指数
1
解决办法
2300
查看次数

使用%>%管道和点(.)表示法

map嵌套的data_frame上使用时,我不明白为什么后两个版本会出错,我应该如何使用dot(.)?

library(tidyverse)
# dummy data
df <- tibble(id = rep(1:10, each = 10), 
                 val = runif(100))
df <- nest(df, -id)

# works as expected
map(df$data, min)
df %>% .$data %>% map(., min)

# gives an error
df %>% map(.$data, min)
# Error: Don't know how to index with object of type list at level 1

df %>% map(data, min)
Run Code Online (Sandbox Code Playgroud)

r magrittr

22
推荐指数
1
解决办法
2822
查看次数

INNER JOIN Where Clause

做某事之间是否有区别?

SELECT * 
FROM table1 INNER JOIN table2 ON table2.ObjectId = table1.table2ObjectId 
WHERE table2.Value = 'Foo'
Run Code Online (Sandbox Code Playgroud)

VS

SELECT * 
FROM table1 INNER JOIN table2 
ON table2.ObjectId = table1.table2ObjectId AND table2.Value = 'Foo'
Run Code Online (Sandbox Code Playgroud)

sql sql-server

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

使用dplyr将变量作为函数的默认参数

目标

我的目标是定义一些在dplyr动词中使用的函数,它们使用预定义的变量.这是因为我有一些这些函数带有一堆参数,其中许多参数都是相同的变量名.

我的理解:这很难(也许是不可能的)因为dplyr稍后会懒惰地评估用户指定的变量,但是任何默认参数都不在函数调用中,因此不可见dplyr.

玩具示例

考虑以下示例,我用它dplyr来计算变量是否已更改(在这种情况下相当无意义):

library(dplyr)
mtcars  %>%
  mutate(cyl_change = cyl != lag(cyl))
Run Code Online (Sandbox Code Playgroud)

现在,lag还支持备用排序,如下所示:

mtcars  %>%
  mutate(cyl_change = cyl != lag(cyl, order_by = gear))
Run Code Online (Sandbox Code Playgroud)

但是,如果我想创建自己的版本lag,总是按顺序排序gear呢?

尝试失败

天真的方法是这样的:

lag2 <- function(x, n = 1L, order_by = gear) lag(x, n = n, order_by = order_by)

mtcars %>%
  mutate(cyl_change = cyl != lag2(cyl))
Run Code Online (Sandbox Code Playgroud)

但这显然会引发错误:

没有找到名为'gear'的对象

更现实的选择是这些,但它们也不起作用:

lag2 <- function(x, n = 1L) lag(x, n = n, order_by = ~gear) …
Run Code Online (Sandbox Code Playgroud)

r scoping dplyr lazyeval

17
推荐指数
2
解决办法
1249
查看次数

绘制所有数据点的平滑线

我正在尝试绘制一条直接穿过我所有数据点的平滑线,并且具有基于另一个变量的渐变.理论上多项式插值可以完成工作,但我不确定如何使用ggplot.这是我到目前为止所提出的:

数据:

 dayofweek hour impressions conversions      cvr
         1    0     3997982       352.0 8.80e-05
         1    1     3182678       321.2 1.01e-04
         1    2     2921004       248.6 8.51e-05
         1    3     1708627       115.6 6.77e-05
         1    4     1225059        98.4 8.03e-05
         1    5     1211708        62.0 5.12e-05
         1    6     1653280       150.0 9.07e-05
         1    7     2511577       309.4 1.23e-04
         1    8     3801969       397.8 1.05e-04
         1    9     5144399       573.0 1.11e-04
         1   10     5770269       675.6 1.17e-04
         1   11     6936943       869.8 1.25e-04
         1   12     7953053       996.4 1.25e-04
         1   13     8711737      1117.8 1.28e-04
         1   14     9114872 …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

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

如何用长标签维护ggplot的大小

我有一个情节,它是每种事件类型的简单条形图.我需要情节的标签在情节之下,因为一些事件有很长的名字并且横向压扁了情节.我试图在标题下面移动标签,但是当有很多事件类型时,它现在会被压扁.有没有办法有一个静态的地块大小(即条形图),以便长传说不会压缩情节?

我的代码:

ggplot(counts_df, aes(x = Var2, y = value, fill - Var1)+
    geom_bar(stat = "identity") +
    theme(legend.position = "bottom") +
    theme(legen.direction = "vertical") +
    theme(axis.text.x = element_text(angle = -90)
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述

我认为这是因为图像尺寸必须是静态的,因此曲线会因轴而牺牲.当我在情节下面放置一个传奇时,同样的事情发生了.

r ggplot2

16
推荐指数
3
解决办法
9378
查看次数

将列表列直接分成几列

我可以直接在n列中删除列表列吗?

可以假定该列表是规则的,所有元素的长度相等.

如果不是列表列,我会有一个字符向量,我可以tidyr::separate.我可以tidyr::unnest,但我们需要另一个辅助变量才能tidyr::spread.我错过了一个明显的方法吗?

示例数据:

library(tibble)

df1 <- data_frame(
  gr = c('a', 'b', 'c'),
  values = list(1:2, 3:4, 5:6)
)
Run Code Online (Sandbox Code Playgroud)
# A tibble: 3 x 2
  gr    values   
  <chr> <list>   
1 a     <int [2]>
2 b     <int [2]>
3 c     <int [2]>
Run Code Online (Sandbox Code Playgroud)

目标:

df2 <- data_frame(
  gr = c('a', 'b', 'c'),
  V1 = c(1, 3, 5),
  V2 = c(2, 4, 6)
)
Run Code Online (Sandbox Code Playgroud)
# A tibble: 3 x 3
  gr       V1    V2
  <chr> <dbl> …
Run Code Online (Sandbox Code Playgroud)

r tidyr tibble

16
推荐指数
4
解决办法
3317
查看次数

如何跳转到下一个顶级循环?

我有一个for嵌套在另一个for循环中的循环.我怎样才能使它在内循环中发生某些东西时,我们退出并跳转到外循环的下一次迭代?

uuu <- 0

for (i in 1:100) {
    uuu <- uuu + 1
    j <- 1000
    for (eee in 1:30) {
        j <- j - 1
        if (j < 990) {
            # if j is smaller than 990 I hope start next time of i
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

loops r nested-loops

15
推荐指数
2
解决办法
4万
查看次数

R - 并行化多模型学习(使用dplyr和purrr)

这是关于学习多个模型的先前问题的后续跟进.

用例是我对每个主题都有多个观察结果,我想为每个主题训练一个模型.请参阅哈德利关于如何做到这一点的精彩演讲.

简而言之,这可以使用dplyrpurrr喜欢这样:

library(purrr)
library(dplyr)
library(fitdistrplus)
dt %>% 
    split(dt$subject_id) %>%
    map( ~ fitdist(.$observation, "norm")) 
Run Code Online (Sandbox Code Playgroud)

如此以来,建立模型是一个尴尬的并行任务,我在想,如果dplyr,purrr有一个易于使用的此类任务并行机制(如平行map).

如果这些库不提供易于并行化可以把它采用了经典的[R并行库(做parallel,foreach等)?

parallel-processing r dplyr purrr

15
推荐指数
2
解决办法
2841
查看次数