我正在处理来自mothur的稀疏输出,它基本上给我一个数据集,其中包含采样的序列数和几个样本中的唯一序列数.我想使用ggplot2来可视化这些数据,因此需要使用melt从a wide到long格式.
问题是我发现由于错误导致无法完成这项工作melt.这基本上说明了
错误:数据中找不到id变量:1,3,6,(...等等)
由于原始数据集的大小,在此处共享它将是不切实际的,但是应该能够使用以下代码重新创建相同的问题:
a<-seq(0,300,3)
b<-runif(length(a))
c<-runif(length(a))
d<-as.data.frame(cbind(a,b,c))
d$a<-as.factor(d$a)
melt(d,d$a)
Run Code Online (Sandbox Code Playgroud)
这给出了完全相同的错误:
错误:数据中找不到id变量:0,3,6,9,(...)
我没有看到我做错了什么.我在ubuntu服务器12.04上使用R 2.15.1.功能reshape::melt和reshape2::melt结果都是相同的错误.
当我在将R从3.4.4更新到3.5.1之后通过从源代码编译来更新(或至少尝试)rgdal包时,我遇到一个奇怪的问题,一切顺利,但命名空间加载由于"未定义的符号"错误:
** installing vignettes
** testing if installed package can be loaded
Error: package or namespace load failed for ‘rgdal’ in dyn.load(file, DLLpath = DLLpath, ...):
unable to load shared object '/usr/local/lib/R/site-library/rgdal/libs/rgdal.so':
/usr/local/lib/R/site-library/rgdal/libs/rgdal.so: undefined symbol: _ZNK10OGRFeature16GetFieldAsDoubleEi
Error: loading failed
Execution halted
ERROR: loading failed
* removing ‘/usr/local/lib/R/site-library/rgdal’
* restoring previous ‘/usr/local/lib/R/site-library/rgdal’
The downloaded source packages are in
‘/tmp/RtmpHu6D0N/downloaded_packages’
Warning message:
In install.packages("rgdal") :
installation of package ‘rgdal’ had non-zero exit status
Run Code Online (Sandbox Code Playgroud)
在跑步的时候,echo _ZNK10OGRFeature16GetFieldAsDoubleEi | c++filt我得到的输出OGRFeature::GetFieldAsDouble(int) const并没有让我学到很多东西.我已经安装了GDAL从 …
我正在尝试使用ggplot2制作更好的R基础图.不仅有一个共同的传奇,而且因为我喜欢ggplot2样式和自定义.我的数据由3个单独的数据集组成,这些数据集包含几组(但不同)治疗的相同的两组观察结果.因此,我想在1个图中生成3个单独的图,但是具有不同的因子水平.为了说明我的观点,这里的第一个图像是我到目前为止用R base生成的图像:

我尝试使用与我的数据具有完全相同结构的伪数据生成ggplot2图:
foo<-data.frame(c(letters,letters),c(rep('T1',26),rep('T2',26)),
runif(52),rep(c(rep('Ori1',12),rep('Ori2',8),rep('ori3',6)),2))
names(foo)<-c('Treatment','Type','Count','Origin')
a<-ggplot(foo,aes(x = factor(Treatment),y = Count))
a+ facet_grid(Origin~., scales="free_y", space="free") +
geom_bar(stat="identity",aes(fill=factor(foo$Type)),position="dodge")
+theme_bw()+theme(axis.text.x=element_text(angle=60,hjust=1))+coord_flip()
Run Code Online (Sandbox Code Playgroud)
这给了我以下不良后果.

我知道堆栈溢出主题从ggplot2中的Facet中删除未使用的因子以及如何从ggplot2 facets中删除空因子?但是,他们没有处理我试图在这里实现的聚类条形图,我觉得它们是问题,但现在不知道如何解决它.欢迎所有指针.
使用网格排列时遇到以下问题:
我希望我的所有面板(a,b,c)具有相同的尺寸,但是我已经从面板a和b(仅具有单个x轴)中移除了标签和刻度线图a和b的大小对于c的标记和刻度标记,它更大并且等于图c +空间的大小.我不能使用ggplot2::facet_grid任何一个,因为我想独立地指定y轴限制(例如,直到40和b和c直到15).下面你可以找到用于生成这个图的工作实例,根据这篇文章垂直对齐图,但我无能为力,如何确保每个图的高度分别相同.任何指针都是受欢迎的.
library(ggplot2)
library(gridExtra)
# generate data
data <- data.frame(values=c(runif(20,0,40),runif(40,0,15)),product=c(rep("a",20),rep("b",20),rep("c",20)),treat=c("e","f","g","h","i"),time=c(0,6,24,48))
my_labeller <- function(var, value){
value <- as.character(value)
value <- c("a","b","c")
return(value)
}
#subset data
data_a <- data[1:20,]
data_b <- data[21:40,]
data_c <- data[41:60,]
# Make plots for all parameters seperatly:
p_a <- ggplot(data_a,fill = white,
aes(x=as.numeric(as.character(time)),y=as.numeric(as.character(values))))
p_a <- p_a+ geom_point(aes(colour=treat,shape=treat),size=4)
p_a <- p_a + geom_line(aes(colour=treat))
p_a <- p_a + theme(axis.ticks.x = element_line(colour = "grey"),
axis.ticks.y =element_line(colour = "grey"),
panel.background = element_rect(fill = "white"),
panel.grid.major=element_blank(),
panel.grid.minor=element_blank(), …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过使用dplyr::arrange. 问题是我试图排序的列包含一个固定字符串后跟一个数字,例如由下面的 dummycode 生成。
dummydf<-data.frame(values=rnorm(100),sortcol=paste0("ABC",sample(1:100,100,replace=FALSE)))
Run Code Online (Sandbox Code Playgroud)
默认情况下, usingdummydf %>% arrange(sortcol)会生成一个按字母数字 (?) 排序的 df ,但这当然不是所需的结果:
values sortcol
0.708081720 ABC1
0.041348322 ABC10
1.730962886 ABC100
0.423480861 ABC11
-1.545837266 ABC12
-1.345539947 ABC13
-0.078998792 ABC14
0.088712174 ABC15
0.670583024 ABC16
1.238837680 ABC17
-1.459044293 ABC18
-2.028535223 ABC19
0.779514385 ABC2
1.360509910 ABC20
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我想对列进行排序gtools::mixedsort,确保 ABC2 跟在 ABC1 之后,并且前面没有 ABC1-19 和 ABC100mixedsort(as.character(dummydf$sortcol))会做到这一点。
现在,我知道我可以通过sub在我的arrange论点中使用来做到这一点:dummydf %>% arrange(as.numeric(sub("ABC","",sortcol)))但这主要是因为我的字符串是固定的(尽管任何正则表达式都可以用于捕获我认为的任何字符串后面的最后一位数字)。
我只是想知道:是否有一种更“优雅”和通用的方式来完成这件事dplyr::arrange,就像gtools::mixedsort?
亲切的问候,
调频
为了在科学出版物中使用,我想在一个用par(mfrow = c(3,1))生成的图中的三个图中添加一个键(A,B,C)作为"标题".为单个绘图添加一个漂亮的"标题"键的一个非常简单的解决方案是使用title()的'outer'参数(例如title(outer=T,adj=0,main="A",cex=1.1, col="black",font=2,line=-1)),但是当这将用于多个绘图时,所有标题最终都在同一个地方:
par(mfrow=c(3,1))
plot(rnorm(100),col="red")
title(outer=T,adj=0,main="A",cex=1.1,col="black",font=2,line=-1)
plot(rnorm(100),col="blue")
title(outer=T,adj=0,main="B",cex=1.1,col="black",font=2,line=-1)
plot(rnorm(100),col="green")
title(outer=T,adj=0,main="C",cex=1.1,col="black",font=2,line=-1)
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用布局和/或mtext(使用par(mfrow)编译的图形面板的公共主标题)但是我觉得可能有一个更容易的解决方案,我正在忽略(我没有访问Adobe Illustrator,并且会喜欢用R来完全生成图表.我可以通过使用布局得到的解决方案不够好(键与绘图分离得太多而左边不够),同时我发现边缘和坐标的游戏有点过于繁琐.
par(mar=c(1,2,2,1))
layout(matrix(seq(1,6),ncol=1),heights=rep(c(1,3),3))
plot.new()
text(0,0.5,"A",cex=1.1,font=2)
plot(rnorm(100),col="red")
plot.new()
text(0,0.5,"B",cex=1.1,font=2)
plot(rnorm(100),col="blue")
plot.new()
text(0,0.5,"C",cex=1.1,font=2)
plot(rnorm(100),col="blue")
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激.即使答案是简单地说这是不可能的,这仍然会非常有帮助.
我在Sweave中非常喜欢的一个功能是可以选择让单独的Sweave文件的\ SweaveInput {}具有更"模块化"的报告,并且能够注释掉我不想生成的报告部分单一#\SweaveInput{part_x}而不必评论整个代码块.最近我决定转向R Markdown,主要有多种原因,主要是实用性,报告中交互式(Shiny)集成的选项以及我并不真正需要LaTeX的广泛格式化选项.我发现技术上pandoc能够通过连接它们将多个Rmd文件组合成一个html输出,但如果可以从"主"Rmd文件调用此行为则会很好.
任何答案都会非常感激,即使它只是"回到Sweave,在Markdown中是不可能的".
我正在使用R 3.1.1 for Windows和Linux以及Rstudio 0.98.1056和Rstudio服务器0.98.983.
我试图将一个参数传递给一个函数,它是一个字符串,但必须同时评估它的名称(符号?)和它的值(参见下面的示例)。到目前为止,我能够用来base::get获取实际值,但分配flowCore::'transform,flowSet-method'失败。我知道关于 SO 的许多问题都是关于将字符串评估为变量名,正如您将在下面看到的,我尝试了很多。我认为必须有一个rlang基于答案的答案,但我找不到任何解决方案,任何指针将不胜感激。
一个可重现的例子:
# load required packages -------------------------------------------------------
library(flowAI) # Bioconductor
library(flowCore) # Bioconductor
library(rlang)
# load example data ------------------------------------------------------------
data(Bcells) # from flowAI
# reprex -----------------------------------------------------------------------
timeCh <- "Time" # this could be variable
x <- flowCore::transform(Bcells,`Time`=(`Time`-min(`Time`))) # this works
y <- flowCore::transform(Bcells,`Time`=(get(timeCh)-min(get(timeCh)))) # still good
z <- flowCore::transform(Bcells,timeCh=(get(timeCh)-min(get(timeCh)))) # not good
Run Code Online (Sandbox Code Playgroud)
虽然在上面的代码中,转换 forz将运行得很好,但实际上一个新列被添加到名为“timeCh”的 flowSet 中。这不是想要的效果,因为我想使用转换来专门更改现有的 column Time。因此,我一直在尝试一些策略来评估存储在 timeCh 中的字符串作为对象名称 (?) into transform,但无济于事:
timeSym <- sym("Time")
timequo <- …Run Code Online (Sandbox Code Playgroud)