我有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我正在使用的论据,左侧被切断,但我需要这个,如下所示).
然后,我prune行dendrogram根据深度截止值来获得较少的集群(即,只有深深的分裂),并做一些编辑所产生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)
require(cowplot)
plot_grid(dend1.plot,map1.plot,align='h',rel_widths=c(0.5,1)) …Run Code Online (Sandbox Code Playgroud) 在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) 做某事之间是否有区别?
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) 我的目标是定义一些在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) 我正在尝试绘制一条直接穿过我所有数据点的平滑线,并且具有基于另一个变量的渐变.理论上多项式插值可以完成工作,但我不确定如何使用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) 我有一个情节,它是每种事件类型的简单条形图.我需要情节的标签在情节之下,因为一些事件有很长的名字并且横向压扁了情节.我试图在标题下面移动标签,但是当有很多事件类型时,它现在会被压扁.有没有办法有一个静态的地块大小(即条形图),以便长传说不会压缩情节?
我的代码:
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)
结果:
我认为这是因为图像尺寸必须是静态的,因此曲线会因轴而牺牲.当我在情节下面放置一个传奇时,同样的事情发生了.
我可以直接在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)
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]>
目标:
df2 <- data_frame(
gr = c('a', 'b', 'c'),
V1 = c(1, 3, 5),
V2 = c(2, 4, 6)
)
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)# A tibble: 3 x 3 gr V1 V2 <chr> <dbl> …
我有一个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) 这是关于学习多个模型的先前问题的后续跟进.
用例是我对每个主题都有多个观察结果,我想为每个主题训练一个模型.请参阅哈德利关于如何做到这一点的精彩演讲.
简而言之,这可以使用dplyr和purrr喜欢这样:
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等)?
r ×9
ggplot2 ×3
dplyr ×2
cowplot ×1
dendrogram ×1
heatmap ×1
lazyeval ×1
loops ×1
magrittr ×1
nested-loops ×1
purrr ×1
scoping ×1
sql ×1
sql-server ×1
tibble ×1
tidyr ×1
venn-diagram ×1