小编B C*_*hen的帖子

为什么Perl的逻辑运算符&&,|| ,! 优先于和,或,而不是?

这可能是一个小点,但我想知道为什么Perl的逻辑运算符(&&,||,和!)优先于易于理解的"英语"逻辑运算符(and,ornot).使用前一组是否有任何优势,以及在脚本中使用后一组的任何缺点?

perl

12
推荐指数
2
解决办法
6480
查看次数

perl中parens/bracket使用的规则(?)

做了一些搜索但找不到任何有用的东西.我想知道是否有一个摘要表,供初学者了解使用parens/bracket的"规则",特别是(),[],{}之间的差异.不幸的是,根据我的经验,use strictuse warnings没有告诉我,如果我使用错误的parens.

例如,下面是合法代码(b/c来自ikegami).

@{"genotype".($i)}
@{$genotype[$i]}
$genotype[$i] = [ split (/:/, $original_line[$i])]
my @genotype = map {[split /:/]} @original_line[6..14]
Run Code Online (Sandbox Code Playgroud)

但这些下面也是合法的吗?通常情况下(对我来说)知道代码的其他部分(逻辑)是否导致问题是很困难的.通过parens对我(初学者)进行排序对于良好的编码似乎微不足道.任何关于如何正确使用parens的指南都会很棒.

@{"genotype".[$i]}
@["genotype".($i)]
@("genotype".($i))
@{$genotype($i)}
@[$genotype($i)]
$genotypes[$i] = ( split (/:/, $original_line[$i]))
my @genotype = map ([split /:/]) @original_line[6..14]
Run Code Online (Sandbox Code Playgroud)

perl square-bracket curly-brackets

12
推荐指数
1
解决办法
2718
查看次数

要查看R中包中的所有内容(而不仅仅是对象)

这可能是一个新手的问​​题,但我认为我做了我的作业,但还没有找到答案(我希望找到),所以我在这里张贴它寻求一些帮助.

之前提出过类似的问题,但是从我发现的问题来看,除了"昂贵的"解决方案之外,没有任何答案可以帮助我解决当前问题,这需要R的编辑.

我了解到lsobjects允许我们查看包中的对象.但即便如此ls(all.names=TRUE),我仍然看不到所有的内容.有人建议,ls(getNAMEspace)但这对我来说还不够"好".

例如

>search()
[1]".GlobalEvn"      "package:TCGAGBM"
>ls("package:TCGAGBM")
character(0)
>ls(getNamespace("TCGAGBM"),all.names=TRUE)
[1]"._NAMESPACE_."   "._S3MethodsTable_."  ".packageName"
Run Code Online (Sandbox Code Playgroud)

但是,在C(cmd)下,我看到以下内容

C:\ Users\XYZ\Documents\R\R-2.15.1\library\TCGAGBM... data extdata ......(共3个文件,7个Dir(s))

当我看到下面的脚本行时,我遇到了这种"差异" -

>clinical=read.delim(system.file(
+"extdata/Clinical/clinical_patient_public_GBM.txt.gz",
+package="TCGAGBM"), header=TRUE)
Run Code Online (Sandbox Code Playgroud)

因此,我想知道在R下是否有办法查看包中的所有内容,以便我们"知道"如何更好地利用包.Vignette可能会有所帮助,但是由于我迄今为止对R的经验有限,我发现有些软件包没有附带Vignette.

任何评论将不胜感激,以帮助我了解更多关于R.

r

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

Latex和R之间的工作流程拧紧了

试着写我的第二个Latex文件

\documentclass{article}
\title{simple Sweave script}
\usepackage{/Users/Brenden/Documents/R/R-2.15.1/share/texmf/tex/latex/Sweave}
\begin{document}
\maketitle
 This is a simple script to demonstrate Sweave. Let's
 begin by generating some results
<<>>=
x=rnorm(30)
y=rnorm(30)
mean(x)
cor(x,y)
@
and follow that up with some random text
\end{document}
Run Code Online (Sandbox Code Playgroud)

文件以.Rnw作为扩展名保存.然后我可以在R下使用Sweave将文件转换为tex.然后我在cmd下运行pdflatex来获取我的.pdf文件.R存储在/ Users/Brenden/Documents下.MiKTex存储在/ Users/Brenden/Desktop下.

据说通常不需要使用"usepackage"行,因为当我在R下运行Sweave时,一行"usepackage {Sweave}"将被添加到tex文件中,该文件存储在/ Users/Brenden/Documents下.但是,如果我没有输入userpackage行,当我在cmd下运行pdflatex时(在/ Documents或/ Desktop下),我得到了一个"Sweave.sty not found"的消息.所以我总是通过添加一行usepackage以及详细的路径帮助规避问题来解决这个问题.虽然"Sweave.sty not found"问题被规避了,但我注意到当我在cmd下运行pdflatex时,我得到了回复

LaTeX Warning: You have requested package '/Users/Brenden/Documents/R/R- 
2.15.1/share/texmf/tex/latex/Sweave', but the package provides "Sweave'.
Run Code Online (Sandbox Code Playgroud)

然后它在MiKTex下使用.sty运行几个文件

(C:\Users\Brenden\Desktop\MiKTex\tex\latex\base\ifthen.sty)
(C:\Users\Brenden\Desktop\MiKTex\tex\latex\graphics\graphicx.sty)
(C:\Users\Brenden\Desktop\MiKTex\tex\latex\graphics\keyval.sty)
(C:\Users\Brenden\Desktop\MiKTex\tex\latex\graphics\graphics.sty)
(C:\Users\Brenden\Desktop\MiKTex\tex\latex\graphics\trig.sty)
...
Run Code Online (Sandbox Code Playgroud)

最终创建一个.pdf

从Stackoverflow上的另一篇文章中可以看出,"当您安装LaTeX时,该路径会自动设置;它是您的个人texmf树,您可以将任何想要LaTeX的样式或类文件放在那里.目录名称无关紧要,它以递归方式搜索Sweave.sty".然而,对我而言,除非我指定路径,否则我的MiKTex显然无法找到Sweave.sty.即使有了路径规范,LaTex仍然会给我一个警告.有人可以向我解释一下我搞砸了吗(在安装MiKTex期间,也许?)这样我就可以帮助MiKtex在没有指定路径的情况下找到Sweave的方式?

谢谢.

latex r sweave

6
推荐指数
2
解决办法
1506
查看次数

如何基于现有数组的一部分形成新数组

我试图基于现有阵列构建一个新阵列.

#!/usr/bin/perl
#join
use warnings;
use strict;

my @names = ('jacob', 'michael', 'joshua', 'mathew');
my @t_names = join ("\t" , @names);
my @t_names2 = join ("\t", $names[0],$names[2]);
print @t_names, "\n";
print @t_names2, "\n";
Run Code Online (Sandbox Code Playgroud)

测试脚本允许我连接旧数组中的2个元素以形成新数组.但是如果我的数组有1000个元素并且我想形成一个只包含1000个元素的选择部分的新数组(例如,元素3和3的倍数).我试过join ("\t", $names[0,2])但是perl无法识别$names[0,2](输出表明它$names[0,2]被"识别"为$names[2].并且不确定这个错误意味着什么" multidimensional syntax not supported at join.pl"

如果join不是正确的函数,我可以用其他方式从现有数组构建一个部分数组?谢谢.

perl

5
推荐指数
2
解决办法
1万
查看次数

显示R中包中函数的源代码

可能重复:
R:显示包中S4函数的源代码

我下载了一个包(GEOquery)并正在玩一些函数.其中一个被调用Table,根据我的理解,它能够制表S4数据集.

例如

> summary(GDS2853) # GDS2853 is a dataset I downloaded from NCBI 
Length  Class   Mode 
     1    GDS     S4 
Run Code Online (Sandbox Code Playgroud)

getAnywhere(Table) 节目

> getAnywhere(Table)
A single object matching ‘Table’ was found
It was found in the following places
  package:GEOquery
  namespace:GEOquery
with value

function (object) 
standardGeneric("Table")
<environment: 0x06ad5268>
attr(,"generic")
[1] "Table"
attr(,"generic")attr(,"package")
[1] "GEOquery"
attr(,"package")
[1] "GEOquery"
attr(,"group")
list()
attr(,"valueClass")
character(0)
attr(,"signature")
[1] "object"
attr(,"default")
`\001NULL\001`
attr(,"skeleton")
function (object) 
stop("invalid call in method dispatch …
Run Code Online (Sandbox Code Playgroud)

r s4

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

连接需要Perl中的"空间"吗?

没有从谷歌的问题上找到任何解释,虽然我可能没有使用正确的搜索词.

SCRIPT1:

#!usr/bin/perl
#concatenation2.pl
use warnings;
use strict;
print"Four sevens are",4*7 ,"\n";
print"Four sevens are".4*7 ."\n";
Run Code Online (Sandbox Code Playgroud)

SCRIPT2:

#!usr/bin/perl
#concatenation2.pl
use warnings;
use strict;
print"Four sevens are",4*7,"\n";
print"Four sevens are".4*7."\n";
Run Code Online (Sandbox Code Playgroud)

script1的输出是:

Four sevens are28
Four sevens are28
Run Code Online (Sandbox Code Playgroud)

好的,所以我(了解到)在关闭双引号之前需要一个空格.但是,script2的输出最终出现错误消息:

string found where operator expected at concatenate2.pl line 6, near "7."\n""
(Missing operator before "\n"?)
syntax error at concatenate2.pl line 6, near "7."\n""
Run Code Online (Sandbox Code Playgroud)

我无处可寻找解释为什么数字和数字之间需要有空格的原因.在script2中,虽然数字之间不需要空间,但我目前依靠谷歌和免费的perl书来帮助我学习语言.任何帮助(这种细微差别的一般准则)将不胜感激.谢谢.

perl

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

在Windows中运行perl不需要#!/ usr/bin/perl,但是

关于使用的类似问题

#! /usr/bin/perl
Run Code Online (Sandbox Code Playgroud)

已经回答了.但我认为我有一个稍微不同的问题,尽管可能仍然与知情人士相似,因为我对计算缺乏了解.

我的Windows上没有UNIX,所以无法直接测试以下内容,但是虽然在Windows下运行Perl确实不需要shebang行,而hello.pl中的shebang行,我仍然无法运行文件,如果我从

c:\Users\XYZ\Desktop\BegPerl
Run Code Online (Sandbox Code Playgroud)

c:\Users\XYZ\Desktop
Run Code Online (Sandbox Code Playgroud)

我的脚本存储在

c:\Users\XYZ\Desktop\BegPerl
Run Code Online (Sandbox Code Playgroud)

我的perl文件夹存储在

c:\Strawberry\perl\bin\perl.exe
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

  1. Windows如何找到"perl.exe"?
  2. 为什么Windows只能在我输入的情况perl hello.pl下找到hello.pl ,c:\Users\XYZ\Desktop\BegPerlc:\Users\XYZ\Desktop即使包含了shebang行,也不能找到它?

我得到的关于shebang线的"目的"的答案是

对于类UNIX系统来定位脚本的可执行文件

所以,我想我的两个问题的答案可能与类UNIX系统和Windows之间的区别有关.

windows perl

3
推荐指数
1
解决办法
5166
查看次数

关于Perl中正则表达式基本规则的混淆

我在理解基本规则方面遇到了很多麻烦,regex并希望有人能用"简单的英语"帮助解释它们.

$_ = '1: A silly sentence (495,a) *BUT* one which will be useful. (3)';

print "Enter a regular expression: ";
my $pattern = <STDIN>;
chomp($pattern);

if (/$pattern/) {
    print "The text matches the pattern '$pattern'.\n";
    print "\$1 is '$1'\n" if defined $1;
    print "\$2 is '$2'\n" if defined $2;
    print "\$3 is '$3'\n" if defined $3;
    print "\$4 is '$4'\n" if defined $4;
    print "\$5 is '$5'\n" if defined $5;
}
Run Code Online (Sandbox Code Playgroud)

三个测试输出

Enter a regular expression: ([a-z]+) …
Run Code Online (Sandbox Code Playgroud)

regex perl

3
推荐指数
1
解决办法
133
查看次数

一个更好的变量命名系统?

编程的新手.任务是从字符串中提取特定数据,我选择编写如下代码 -

while ($line =<IN>) {
    chomp $line;
    @tmp=(split /\t/, $line); 
    next if ($tmp[0] !~ /ch/); 
    @tgt1=@tmp[8..11];
    @tgt2=@tmp[12..14];
    @tgt3=@tmp[15..17];
    @tgt4=@tmp[18..21];
    foreach (1..4) {
            print @tgt($_), "\n";
            }
Run Code Online (Sandbox Code Playgroud)

我认为@tgt($_)会被解释为@tgt1, @tgt2, @tgt3, @tgt4但我仍然得到@tgt一个全局符号的错误消息(@ tgt1,@ tgt2,@ tgt3,@ tgt4`已被声明).

Q1.我是否误解了foreach循环?

Q2.为什么perl看不到@tgt($_)@ tgt1,@ tgt2 ..etc?

Q2.根据经验,这可能是命名变量的一种不好的方法.命名具有相似特征的变量的首选方法是什么?

perl foreach

2
推荐指数
1
解决办法
93
查看次数

哈希中是否有隐藏的空白元素?

和哈希一起玩我遇到了以下输出,不知道为什么会这样.默认情况下哈希中是否有嵌入的空格?

#! /usr/bin/perl
# playwhash
use warnings;
use strict;

my %normal = ("Tom ","5'3","Peter ","5'11","John " ,"5'7",);
foreach (1..6) {
    print each %normal, "\n";
    }
Run Code Online (Sandbox Code Playgroud)

输出看起来像

Peter 5'11
Tom 5'3
John 5'7

Peter 5'11
Tom 5'3
Run Code Online (Sandbox Code Playgroud)

perl

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

Perl脚本中的语法错误

通过提问来获得减分的风险,我正在为Perl解释器提取的错误寻求帮助.这是Beginning Perl的作业问题.

问:修改货币计划以继续询问货币名称,直到输入有效的货币名称.

#! /usr/bin/perl
#convert.pl
use warnings;
use strict;

my ($value, $from, $to, $rate, %rates);
%rates = (
    pounds => 1,
    dollars => 1.6,
    marks => 3,
    "french frances" => 10,
    yen => 174.8,
    "swiss frances" => 2.43,
    drachma => 492.3,
    euro => 1.5
);

print "currency exchange formula -
pounds, dollars, marks, french frances, 
yen, swiss frances, drachma, euro\n";


print "Enter your starting currency: ";
$from = <>;
chomp($from);

While ($from ne $rates{$from}) {

    print "I don't know …
Run Code Online (Sandbox Code Playgroud)

perl

0
推荐指数
1
解决办法
707
查看次数

脚本中的"-n"是什么?

看到了脚本(见下文),但找不到更多关于"-n"的信息.

my $numeric =0;
my $input = shift;
if ($input eq "-n") {
    $numeric =1;
    $input = shift;
}
my $output = shift;
open INPUT, $input or die $!;
open OUTPUT, ">$output" or die $!;
my @file = <INPUT>;
if ($numeric) {
    @file = sort { $a <=> $b } @file;
} else {
   @file = sort @file;
}
print OUTPUT @file;
Run Code Online (Sandbox Code Playgroud)

解释脚本的文本说明如下"如果我们在程序名称之后在命令行上看到的第一件事是字符串-n,那么我们正在进行数字排序." Google搜索似乎无法识别大多数"非字母数字"符号,因此"-n"搜索不会产生任何效果.我看到的唯一另一个地方"-n"是学习perl,它说下面的"转换后的sed脚本可以使用或不使用-n选项".甚至不确定这是否与"-n"脚本中的相同.任何想法,我可以找到更多关于-n它的信息(虽然它可能只是一个数字字符串??没有别的更多)

perl

0
推荐指数
1
解决办法
128
查看次数

标签 统计

perl ×10

r ×3

curly-brackets ×1

foreach ×1

latex ×1

regex ×1

s4 ×1

square-bracket ×1

sweave ×1

windows ×1