小编War*_*250的帖子

R为同一个对象分配几个列表元素

我目前有一个循环 - 实际上是一个循环循环,在一个模拟模型中,随着个人数量的增加而变慢.我已将其中的大部分内容融入其中,并使其变得更快.但是有一部分我将列表的多个元素分配为同一个东西,将一个大循环简化为我想要实现的任务:

new.matrices[[length(new.matrices)+1]]<-old.matrix
Run Code Online (Sandbox Code Playgroud)

对于循环的每次迭代,调用上面的行,并将相同的矩阵对象分配给列表的下一个新元素.

我试图对此进行矢量化 - 如果可能的话,或者使它比循环或apply语句更快.

到目前为止,我已尝试过以下方面的内容:

indices <- seq(from = length(new.matrices) + 1, to = length(new.matrices) + reps)
new.matrices[indices] <- old.matrix
Run Code Online (Sandbox Code Playgroud)

但是这导致了以下消息:

Warning message:
In new.effectors[effectorlength] <- matrix :
  number of items to replace is not a multiple of replacement length
Run Code Online (Sandbox Code Playgroud)

它还尝试将一个值分配给一个像这样的old.matrix元素new.matrices:

[[1]]
[1] 8687

[[2]]
[1] 1

[[3]]
[1] 5486

[[4]]
[1] 0
Run Code Online (Sandbox Code Playgroud)

当所需的结果是一个列表元素=一个整个矩阵,一个副本 old.matrix

有没有一种方法可以矢量化在列表元素中粘贴矩阵而不需要循环?使用循环当前如何实现它们我们正在谈论成千上万的重复,这会大大减慢事情,因此我希望尽可能地将其向量化.

for-loop r list matrix vectorization

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

在C++和Rcpp中重写慢速R函数

我有这行R代码:

croppedDNA <- completeDNA[,apply(completeDNA,2,function(x) any(c(FALSE,x[-length(x)]!=x[-1])))]
Run Code Online (Sandbox Code Playgroud)

它的作用是识别DNA序列矩阵(1行= 1 seq)中非常规(信息性)的位点(cols),并将它们从矩阵中子集化以制作新的"裁剪矩阵"即摆脱所有值相同的列.对于大数据集,这需要大约6秒.我不知道我是否可以在C++中更快地完成它(仍然是C++中的初学者),但尝试它对我有好处.我的想法是使用Rcpp,循环遍历CharacterMatrix的列,拉出列(站点)作为CharacterVector检查它们是否相同.如果它们相同,则记录该列号/索引,对所有列继续.然后在最后创建一个只包含那些列的新CharacterMatrix.重要的是我保持rownames和列名称,因为它们在矩阵的"R版本"中,即如果列,则colname也应如此.

我已经写了大约两分钟,到目前为止我所拥有的(未完成):

#include <Rcpp.h>
#include <vector>
using namespace Rcpp;
// [[Rcpp::export]]
CharacterMatrix reduce_sequences(CharacterMatrix completeDNA)
{
  std::vector<bool> informativeSites; 
  for(int i = 0; i < completeDNA.ncol(); i++)
  {
    CharacterVector bpsite = completeDNA(,i);
    if(all(bpsite == bpsite[1])
    {
      informativeSites.push_back(i);
    }
  }
CharacterMatrix cutDNA = completeDNA(,informativeSites);
return cutDNA;
}
Run Code Online (Sandbox Code Playgroud)

我对此有正确的解决方法吗?有没有更简单的方法.我的理解是我需要std :: vector因为它很容易长大(因为我事先并不知道我要保留多少cols).有了索引,我需要在最后给信息站点矢量+1(因为R索引来自1而C++来自0)?

谢谢,本W.

c++ r vector rcpp

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

Perl中的数组数组

我是Perl的新手,但是我需要它来从一些可怕的HTML文件中获取一些文本.到目前为止,在代码中,我已经提到了我需要的所有值(我验证它适用于数据转储器):

对于每个数据记录,即2D表的行,它们被称为:

$org, $gene_name, $number, $motif_num, $pos, $strand, $seq
Run Code Online (Sandbox Code Playgroud)

我有很多数据条目,每一个都是一行,上面的值作为列.

为了稍后用它们做其他的事情,我想制作一个2D数组结构,这样我就可以遍历每个条目(行)并选出我需要的值等等.

我认为这样做的最佳方法是使用循环和每个数据条目,在使用regexp匹配提取值后,将值/列组合成单个数据记录的数组:

my @seidl_array_row = ($org, $gene_name, $number, $motif_num, $pos, $strand, $seq);
Run Code Online (Sandbox Code Playgroud)

然后将此数组推送到完成的2D数组阵列:

push @seidl_array, [ @seidl_array_row ];
Run Code Online (Sandbox Code Playgroud)

(@seidl_array是my在循环之前定义的.)

所以实际上我得到了一个2D数据表,其中数组@seidl_array的每个元素都是一个包含值$ org,$ gene_name,$ number,$ motif_num,$ pos,$ strand和$ seq的数组.

我是Perl的新手,因此我不知道这是否是以编程方式执行此操作的正确方法,因为我在以后使用此数据时遇到问题.我想知道问题是否与我如何构建数组数组一起.我的书中的示例使用简单的数据集进行静态处理,这是一个更大的基因组数据gtf文件,因此静态执行它并不可行.

perl multidimensional-array

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

RInside C++入门

我已经成为R用户大约4年了,在过去的两周里,我一直在开发一个简单的函数包来分析一些数据并以适合项目的方式绘制一些图表,我的团队和主管的其他成员都是工作和一些即将到来的.所以他们现在问我是否可以使它成为一个独立于必须知道R的人的可执行文件 - 所以它是一个单独的.exe文件,带有基于文本的菜单或简单的gui.

从冬天开始,我一直在慢慢学习C++,我认为RInside是最好的方法.使用C++生成一个带有R的.exe,用于绘制令人惊叹的绘图和图形,但它将在我的团队可以使用的可执行文件中.我目前已经介绍了C++变量,带有iostream的基本I/O,布尔和控制流,函数,数组,结构和类,重载朋友和引用.我看过Dirk的博客,我重新安装了R到C:\ R \,我安装了CodeBlocks和MinGW,我一直在学习C++.我需要建议我应该采取什么预防措施,以及在继续之前我应该​​检查/阅读/知道什么,以及可能是一个新的友好的方式来开始涉水和尝试.

谷歌搜索我发现教程或演练的方式与Rcpp不同,人们(例如像Hadley)编写了很棒的wiki或博客文章,我觉得比跳过更多的技术文档容易一些.

c++ r rcpp rinside

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

让Affix适用于导航和导航栏

我有一些html用于我的研究小组制作的软件库网站页面的布局.这是通过bootstrap 3完成的.我想要实现的是导航栏,它位于jumbotron正下方,一旦它向上滚动就会固定到页面顶部.我也喜欢页面左栏中的nag元素的类似行为 - 当页面滚动并且它们到达顶部时 - 它们然后变得固定并保持在那里.从阅读中我了解到Twitter中的Affix是实现这一目标的方法,但我并不完全确定我能想出如何做到这一点.

在下面的HTML中发生的事情是滚动到目前为止,应该跨越页面的导航栏变得压扁 - 导航栏链接移动到导航栏品牌下面的一行,并且条形图不再跨越页面.一旦我弄清楚如何使用导航栏使用词缀,我希望将它与nav元素一起使用.任何人都可以解释我需要做些什么来达到效果吗?我对网页设计很新.

谢谢,本.

HTML:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>SOFTWARE - GETTING STARTED WITH SOFTWARE</title> 
        <link rel="stylesheet" href="css/bootstrap.css" type="text/css"/>
    </head>
    <body>
        <style>
            .jumbotron {
                margin-bottom: 0px;
            }
        </style>
        <!-- Start of main container -->
        <div class="container-fluid main">
            <div class="row-fluid">
                <div class="jumbotron">
                    <h1> Getting Started </h1>
                    <p> Installing SOFTWARE on your machine is easy for most systems.
                        This guide will get you up and running.
                    </p>
                </div>
            </div>
                    <!--Here's thestart of the navabar …
Run Code Online (Sandbox Code Playgroud)

html5 navbar twitter-bootstrap affix

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

试图打印矢量的内容

我一直在努力使用C++变得越来越舒服,我开始尝试编写一些文件操作的东西.我正在解决能够解析fasta文件的问题,我遇到了一些问题:

#include<fstream>
#include<iostream>
#include<string>
#include<vector>

using namespace std;

//A function for reading in DNA files in FASTA format.
void fastaRead(string file)
{
    ifstream inputFile;
    inputFile.open(file);
    if (inputFile.is_open()) {
        vector<string> seqNames;
        vector<string> sequences;
        string currentSeq;
        string line;
        while (getline(inputFile, line))
        {
            if (line[0] == '>') {
                seqNames.push_back(line);
            }
        }
    }
    for( int i = 0; i < seqNames.size(); i++){
        cout << seqNames[i] << endl;
    }
    inputFile.close();
}

int main()
{
    string fileName;
    cout << "Enter the filename and path of the …
Run Code Online (Sandbox Code Playgroud)

c++ string vector ifstream

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

在ggplot2&R中着色geom_ribbon

我有以下代码行,它们将两个geom_ribbons绘制到同一个画布上,以创建一个看起来像geom_area的图,但是一个功能区代表数据(如geom_area那样),另一个代表100个数据,这样数据+(100 - data)= 100.代码是:

customBars3 <- ggplot(barsFrame, aes(x=as.numeric(as.character(rAge)), y=PositivePercent)) + geom_ribbon(aes(ymax=100, ymin=PositivePercent, fill = "red")) + geom_ribbon(aes(ymax=PositivePercent, ymin=0, fill = "green")) + facet_wrap(~ Divergence)
Run Code Online (Sandbox Code Playgroud)

我得到一个如下图形:

在此输入图像描述

但是,我希望下部色带实际上是绿色,而上部色带实际上是红色.我该怎么做并相应地更改图例?我指定填充颜色的努力导致图例用所述颜色标记但用不同颜色填充.

谢谢,本.

plot r ggplot2

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

使用erase和remove删除字符串中的字符

我在Stack Overflow和其他论坛上找到了这个解决方案,用于从字符串中删除字符.假设我想从字符串中删除空格:

currentLine.erase( std::remove( currentLine.begin(), currentLine.end(), ' ' ), currentLine.end() );
Run Code Online (Sandbox Code Playgroud)

其中currentLine是字符串的名称.

这种事似乎适用于人,但如果我使用它,我得到:

/local/yrq12edu/Desktop/Bens_C++_Utilities/simuPOPtoFASTA/simuPOP2FASTA.cpp|54|error: cannot convert 'std::basic_string<char>::iterator {aka __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >}' to 'const char*' for argument '1' to 'int remove(const char*)'|
Run Code Online (Sandbox Code Playgroud)

作为编译错误.我认为它与std :: remove函数返回的迭代器有关,不能使用erase方法,但显然它应该可以工作.我该如何解决?

c++ string stl-algorithm

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

在类中使用Map vs Vector - 速度

嗨我有两个版本的类我写的,一个使用地图,一个使用两个向量:

    class NucleotideSequence{
private:
    std::string Name;
    std::vector<int> BasePos;
    std::vector<char> BaseChar;
public:
    NucleotideSequence(std::string name, std::vector<int> &bp, std::vector<char> &bases);
    std::string getName();
    char getBase(int pos); // get a base by it's position in the char array.
    char getAbBase(int abPos); // get a base by it's actual bp position.
};


class NucleotideSequence2{
private:
    std::string Name;
    std::map<int, char> Sequence;
public:
    NucleotideSequence2(std::string &name, std::map<int, char> &seq) throw(FormatError);
    std::string getName();
};
Run Code Online (Sandbox Code Playgroud)

然后我为它们定义了构造函数:

NucleotideSequence::NucleotideSequence(std::string name, std::vector<int> &bp, std::vector<char> &bases)
:Name(name), BasePos(bp), BaseChar(bases)
{
    for (std::vector<char>::iterator i = BaseChar.begin(); …
Run Code Online (Sandbox Code Playgroud)

c++ class vector map

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

调用类的函数时出错

我刚开始为一个类编写一些代码,这将是一个分析引擎,现在很简单,因为我正在处理我可以用我导入的库(bpp代码)做的事情:

#include <string>
#include <iostream> //to be able to output stuff in the terminal.
#include <Bpp/Seq/Alphabet.all> /* this includes all alphabets in one shot */
#include <Bpp/Seq/Container.all> /* this includes all containers */
#include <Bpp/Seq/Io.all> /* this includes all sequence readers and writers */

class myEngine
{
public:
    myEngine();
    ~myEngine();
    void LoadSeq();
};

void myEngine::LoadSeq()
{
    bpp::Fasta fasReader;
    bpp::AlignedSequenceContainer *sequences = fasReader.readAlignment("tester.fasta", &bpp::AlphabetTools::DNA_ALPHABET);
    std::cout << "This container has " << sequences->getNumberOfSequences() << " sequences." << std::endl;
    std::cout << "Is that …
Run Code Online (Sandbox Code Playgroud)

c++ methods class member

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

文件流无法打开

我将以下C++代码作为更大程序的一部分:

/* Open the output streams */
    std::ofstream outputFile;
    outputFile.open(outputName);
    std::ofstream outputFile1;
    outputFile1.open(outputName1);
    std::ofstream outputFile2;
    outputFile2.open(outputName2);

    std::cout <<  outputFile.is_open() << " " << outputFile1.is_open() << " " << outputFile2.is_open() << std::endl;
if (inputFile.is_open() && outputFile.is_open() && outputFile1.is_open() && 

outputFile2.is_open())
...
Run Code Online (Sandbox Code Playgroud)

它应该打开几个输出文件流,然后 - 如果它们全部打开 - 执行一系列操作,写入每个文件流.但是程序会提前终止,因为流永远不会打开:

0 0 0
Filestream or output streams could not open, ending program!
Run Code Online (Sandbox Code Playgroud)

变量outputName是std :: strings,我认为在C++ 11中是允许的(我在OpenBlocks编译器选项中为C++ 11启用了-std标志).

我不确定为什么溪流不会打开.

谢谢.

c++ ofstream c++11

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

将geom_vlines添加到 - 或颜色 - 构面包装图

我有一个由以下R代码生成的图 - 基本上是许多直方图/条的面板.我希望每一个都添加一条垂直线,但每个方面的垂直线在它的位置上是不同的.或者,我想根据x值是否高于阈值将条纹颜色设置为红色 - 如何使用ggplot2/R对此进行绘图.

我这样生成了图表:

Histogramplot3 <- ggplot(completeFrame, aes(P_Value)) + geom_bar() + facet_wrap(~ Generation)
Run Code Online (Sandbox Code Playgroud)

在completeFrame是我的数据框架的地方,P_Value是我的x变量,而Facet Wrap Variable Generation是一个因素.

plot r ggplot2

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