我想知道是否有人可以帮我在R中用多个箭头绘制线条,如下所示:
---> ---> ---> --->
提前致谢!
我正在尝试使用Statistics :: PCA包对某些遗传变异进行PCA.该软件包需要读入列表列表(如果我理解正确,可以是一个数组数组,对吧?).
下面是我的代码的一部分,我为每个人创建数组(每个人都是一个真正的人类主体,获得一个填充0和1的数组,代表是否存在称为"SV"的遗传变体),然后将它们推送到名为@LoL_SVs的数组数组中:
my @LoL_SVs;
foreach (@individuals) {
my $ind = $_;
foreach (@all_SVs) {
if ($SV{$ind}{$_} != 1) {
push(@{$SVs{$ind}}, "0");
}
if ($SV{$ind}{$_} == 1) {
push(@{$SVs{$ind}}, "1");
}
}
push @LoL_SVs, [ @{$SVs{$ind}} ];
}
Run Code Online (Sandbox Code Playgroud)
然后我尝试加载模块的CPAN网站上描述的数据(参见*load_data*段落):
use Statistics::PCA;
my $pca = Statistics::PCA->new;
$pca->load_data ( { format => 'table', data => @LoL_SVs, } );
# ^ this line is where it goes wrong
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用,我收到错误消息:
在/home/abdel/myperl/share/perl/5.10.1/Statistics/PCA.pm第189行使用"严格引用"时,不能使用字符串("0")作为ARRAY引用.
知道这里可能出现什么问题吗?
我希望问题得到明确规定,否则如果您需要更多信息,请告诉我!非常感谢!
我有以下代码用渐变绘制箭头:
csa <- function(x1,y1,x2,y2,first.col,second.col,length=0.15, ...) {
cols <- colorRampPalette( c(first.col,second.col))(250)
x <- approx(c(0,1),c(x1,x2), xout=seq(0,1,length.out=251))$y
y <- approx(c(0,1),c(y1,y2), xout=seq(0,1,length.out=251))$y
arrows(x[250],y[250],x[251],y[251], col=cols[250],length=length, ...)
segments(x[-251],y[-251],x[-1],y[-1],col=cols, ...)
}
color.scale.arrow <- Vectorize(csa, c('x1','y1','x2','y2') )
# Create sample data
x <- c(1,3,5,3,2,1,6,2)
y <- c(2,5,3,7,2,1,5,6)
x1 <- c(1,3,5,3)
y1 <- c(2,5,3,7)
x2 <- c(2,1,6,2)
y2 <- c(2,1,5,6)
# Plot sample data
plot(x,y, main='')
color.scale.arrow(x1,y1,x2,y2,'#5F9EA0','#CD3333',lwd=2)
Run Code Online (Sandbox Code Playgroud)
哪个产生了这个图:

我想让这些线条透明,但只是在颜色代码中添加50(即透明度的比例= 50%)不幸的是:
# Plot sample data (transparent?)
plot(x,y, main='')
color.scale.arrow(x1,y1,x2,y2,'#5F9EA050','#CD333350',lwd=2)
Run Code Online (Sandbox Code Playgroud)
知道为什么这不起作用,以及如何使这些线条透明?
使用 awk,我想打印第一列中包含以 22_ 开头的字符串的所有行
我尝试了以下操作,但显然 * 在 awk 中不能用作通配符:
awk '$1=="22_*" {print $0}' input > output
Run Code Online (Sandbox Code Playgroud)
这在awk中可能吗?
我在Perl(Biomart)中使用一个包打印出查询结果.打印输出的语法如下所示:
$query_runner->execute($query);
$query_runner->printResults();
Run Code Online (Sandbox Code Playgroud)
并将我的查询结果打印到我的终端.相反,我希望打印的内容打印到输出文件.我试过了:
$output = "@ARGV[1]";
open OUT , ">$output" or die "Can't open $output: @ARGV[1].txt!\n";
$query_runner->execute($query);
print OUT $query_runner->printResults();
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用,子程序printResults()仍然打印到我的终端而不是输出文件.有没有办法将其输出打印到我的outputfile而不更改包本身的子程序?
好吧,这段代码可能看起来很奇怪,但这是我知道如何解释我想要做的唯一方法:
$output{$key1}{$key2} = $filename;
open OUT{$key1}{$key2} , ">$output{$key1}{$key2}" or die "Can't open $output: $filename!\n";
print OUT{$key1}{$key2} "$some_variable{$key1}{$key2}\n";
Run Code Online (Sandbox Code Playgroud)
显然,这不起作用.但是我需要一种方法以类似于这个的方式定义输出文件,因为我的输入文件中有2个关键变量({$ key1} {$ key2}),我必须使用它来决定写入哪个文件输出到(我想拥有尽可能多的输出文件,因为我有这两个关键变量的组合).
我希望我的问题很清楚,否则请让我知道......
我试图在一个图中绘制两个直方图,但这两个组的分布方式使得直方图有点难以解释.我的直方图现在看起来像这样:

这是我的代码:
hist(GROUP1, col=rgb(0,0,1,1/2), breaks=100, freq=FALSE,xlab="X",main="") # first histogram
hist(GROUP1, col=rgb(1,0,0,1/2), breaks=100, freq=FALSE , add=T) # second
legend(0.025,600,legend=c("group 1","group 2"),col=c(rgb(1,0,0,1/2),rgb(0,0,1,1/2)),pch=20,bty="n",cex=1.5)
Run Code Online (Sandbox Code Playgroud)
是否可以绘制这个直方图,两组的条彼此相邻,而不是重叠?我意识到这可能会增加一些混乱,因为X轴代表一个连续的变量......如何使这个情节更清晰的其他建议当然也是受欢迎的!
我有一个包含很多子目录的目录,我希望在每一行列出所有具有特定扩展名的文件,包括它们所在的(子)目录.我现在使用:
ls /home/directory -R | grep ".ext" > files.txt
Run Code Online (Sandbox Code Playgroud)
这不会给我我正在寻找的输出...理想情况下我想要一个看起来像这样的输出:
/home/directory/subdirectory1/file1.ext 4.3Mb
/home/directory/subdirectory1/subsubdir1/file2.ext 3.3Mb
/home/directory/subdirectory2/file3.ext 4.6Mb
/home/directory/subdirectory3/file4.ext 5.2Mb
... etc
Run Code Online (Sandbox Code Playgroud)
甚至更好,目录和文件名在不同的列中:
/home/directory/subdirectory1/ file1.ext 4.3Mb
/home/directory/subdirectory1/subsubdir1/ file2.ext 3.3Mb
/home/directory/subdirectory2/ file3.ext 4.6Mb
/home/directory/subdirectory3/ file4.ext 5.2Mb
... etc
Run Code Online (Sandbox Code Playgroud)
关于如何做到这一点的任何想法?非常感谢!
我有以下数据:
trait,beta,se,p,analysis,signif
trait1,0.078,0.01,9.00E-13,group1,1
trait2,0.076,0.01,1.70E-11,group1,1
trait3,-0.032,0.01,0.004,group1,0
trait4,0.026,0.01,0.024,group1,0
trait5,0.023,0.01,0.037,group1,0
trait1,0.042,0.01,4.50E-04,group2,1
trait2,0.04,0.01,0.002,group2,1
trait3,0.03,0.01,0.025,group2,0
trait4,0.025,0.01,0.078,group2,0
trait5,0.015,0.01,0.294,group2,0
trait1,0.02,0.01,0.078,group3,0
trait2,0.03,0.01,0.078,group3,0
trait3,0.043,0.01,1.90E-04,group3,0
trait4,0.043,0.01,2.40E-04,group3,1
trait5,0.029,0.01,0.013,group3,0
Run Code Online (Sandbox Code Playgroud)
并使用以下代码制作一个图:
library(ggplot2)
ggplot(GEE, aes(y=beta, x=reorder(trait, beta), group=analysis)) +
geom_point(data = GEE[GEE$signif == 1, ],
color="red",
shape = "*",
size=12,
show.legend = F) +
geom_point(aes(color=analysis)) +
geom_errorbar(aes(ymin=beta-2*se, ymax=beta+2*se,color=analysis), width=.2,
position=position_dodge(.2)) +
geom_hline(yintercept = 0) +
theme_light() +
theme(axis.title.y=element_blank(),
legend.title=element_blank()) +
coord_flip()
Run Code Online (Sandbox Code Playgroud)
这给了我以下情节:
我想在图例中添加一个额外的元素,即红色星号,我想让它说"重要".我该怎么做呢?
PS.如果您喜欢这段代码,我还有另一个问题,在这里指定:)
我使用的是perl软件包(Biomart),它包含一个名为addFilter()的子程序.该子程序需要一些参数,包括一个需要格式为"nr:nr:nr"的参数.
如果我按如下方式使用子程序,它可以正常工作:
$query->addFilter("chromosomal_region", ["1:1108138:1108138","1:1110294:1110294"]);
Run Code Online (Sandbox Code Playgroud)
但是,如果我像这样使用它,它不起作用:
my $string = '"1:1108138:1108138","1:1110294:1110294","1:1125105:1125105"';
$query->addFilter("chromosomal_region", ['$string']);
Run Code Online (Sandbox Code Playgroud)
由于我在for循环中构造了成千上万的这些参数,我真的需要第二种工作方式......可能导致这种情况的原因是什么?我希望有人可以帮助我,非常感谢!
我正在使用此awk命令打印出文件的某些列
awk '{print $1,$2,$3,$5,log($11),$12}' inputfile > outputfile
Run Code Online (Sandbox Code Playgroud)
输入文件用制表符分隔,输出文件用空格分隔。我也需要将输出文件制表符分隔。我试过了,但这仍然给我一个空格分隔的文件:
awk 'BEGIN{FS="\t"}{print $1,$2,$3,$5,log($11),$12}' inputfile > outputfile
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?非常感谢!
我有一个如下所示的文件:
name measurement gender duration
a 1 m 55
b 1 f 54
c 2 m 53
... etc
Run Code Online (Sandbox Code Playgroud)
我想使用 awk 添加一列,除了第一行(标题)之外,每一行都具有相同的值。假设我想为每行添加值为 99 的列 new_column,因此输出文件如下所示:
name measurement gender duration new_column
a 1 m 55 99
b 1 f 54 99
c 2 m 53 99
... etc
Run Code Online (Sandbox Code Playgroud)
这听起来像是 awk 的工作...但我一直不知道如何做。有任何想法吗?非常感谢!
我在perl中有两个哈希值,每个哈希值由大约250,000个元素组成.我必须将两个哈希值中的每个元素相互比较,并对彼此相等的元素执行另一个操作.我有以下代码,它进行了大约600亿次比较,因此需要很长时间才能完成:
foreach $key1 (keys %large_hash_1)
{
foreach $key2 (keys %large_hash_2)
{
if($some_other_var{$key1} == $some_other_var{$key2}) # so actually I compare another hash variable, using the keys from %large_hash_1 and %large_hash_2
{
# I print some stuff here to an output file using the $key1 and $key2 variables
}
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法更快地完成这项工作?