R: Passing a single list of matrices as input to a function that requires at least 2 input matrices











up vote
1
down vote

favorite












I am trying to use the R mnnCorrect function (from the scran package). It requires at least 2 input matrices to work.



# install package
source("https://bioconductor.org/biocLite.R"); biocLite("scran")
# example matrix 1
B1 <- matrix(rnorm(10000), ncol=50)
# example matrix 2
B2 <- matrix(rnorm(10000), ncol=50)
# function below works fine
out <- mnnCorrect(B1, B2)


However, I am trying to supply these matrices as a list like so (more convenient for automating the process with a variable number of matrices):



mat_list=list()
mat_list[["Mat1"]]=B1
mat_list[["Mat2"]]=B2
str(mat_list)
List of 2
$ Mat1: num [1:200, 1:50] 1.107 -0.828 1.559 -1.353 0.667 ...
$ Mat2: num [1:200, 1:50] -0.231 0.894 0.369 1.606 -1.346 ...

# This works fine
out <- mnnCorrect(mat_list$Mat1, mat_list$Mat2)

# These do not work
out <- mnnCorrect(mat_list)
Error in mnnCorrect(mat_list) : at least two batches must be specified

out <- mnnCorrect(cat(paste(gsub("^","mat_list$",names(mat_list)),collapse=", "))
Error in mnnCorrect(mat_list) : at least two batches must be specified

out <- mnnCorrect(capture.output(cat(paste(gsub("^","mat_list$",names(mat_list)),collapse=", ")))
Error in mnnCorrect(mat_list) : at least two batches must be specified

library(dplyr)
cat(paste(gsub("^","mat_list$",names(mat_list)),collapse=", ") %>% mnnCorrect(.)
mat_list$Mat1, mat_list$Mat2Error in mnnCorrect(.) : at least two batches must be specified


Is there a way to achieve this?










share|improve this question




























    up vote
    1
    down vote

    favorite












    I am trying to use the R mnnCorrect function (from the scran package). It requires at least 2 input matrices to work.



    # install package
    source("https://bioconductor.org/biocLite.R"); biocLite("scran")
    # example matrix 1
    B1 <- matrix(rnorm(10000), ncol=50)
    # example matrix 2
    B2 <- matrix(rnorm(10000), ncol=50)
    # function below works fine
    out <- mnnCorrect(B1, B2)


    However, I am trying to supply these matrices as a list like so (more convenient for automating the process with a variable number of matrices):



    mat_list=list()
    mat_list[["Mat1"]]=B1
    mat_list[["Mat2"]]=B2
    str(mat_list)
    List of 2
    $ Mat1: num [1:200, 1:50] 1.107 -0.828 1.559 -1.353 0.667 ...
    $ Mat2: num [1:200, 1:50] -0.231 0.894 0.369 1.606 -1.346 ...

    # This works fine
    out <- mnnCorrect(mat_list$Mat1, mat_list$Mat2)

    # These do not work
    out <- mnnCorrect(mat_list)
    Error in mnnCorrect(mat_list) : at least two batches must be specified

    out <- mnnCorrect(cat(paste(gsub("^","mat_list$",names(mat_list)),collapse=", "))
    Error in mnnCorrect(mat_list) : at least two batches must be specified

    out <- mnnCorrect(capture.output(cat(paste(gsub("^","mat_list$",names(mat_list)),collapse=", ")))
    Error in mnnCorrect(mat_list) : at least two batches must be specified

    library(dplyr)
    cat(paste(gsub("^","mat_list$",names(mat_list)),collapse=", ") %>% mnnCorrect(.)
    mat_list$Mat1, mat_list$Mat2Error in mnnCorrect(.) : at least two batches must be specified


    Is there a way to achieve this?










    share|improve this question


























      up vote
      1
      down vote

      favorite









      up vote
      1
      down vote

      favorite











      I am trying to use the R mnnCorrect function (from the scran package). It requires at least 2 input matrices to work.



      # install package
      source("https://bioconductor.org/biocLite.R"); biocLite("scran")
      # example matrix 1
      B1 <- matrix(rnorm(10000), ncol=50)
      # example matrix 2
      B2 <- matrix(rnorm(10000), ncol=50)
      # function below works fine
      out <- mnnCorrect(B1, B2)


      However, I am trying to supply these matrices as a list like so (more convenient for automating the process with a variable number of matrices):



      mat_list=list()
      mat_list[["Mat1"]]=B1
      mat_list[["Mat2"]]=B2
      str(mat_list)
      List of 2
      $ Mat1: num [1:200, 1:50] 1.107 -0.828 1.559 -1.353 0.667 ...
      $ Mat2: num [1:200, 1:50] -0.231 0.894 0.369 1.606 -1.346 ...

      # This works fine
      out <- mnnCorrect(mat_list$Mat1, mat_list$Mat2)

      # These do not work
      out <- mnnCorrect(mat_list)
      Error in mnnCorrect(mat_list) : at least two batches must be specified

      out <- mnnCorrect(cat(paste(gsub("^","mat_list$",names(mat_list)),collapse=", "))
      Error in mnnCorrect(mat_list) : at least two batches must be specified

      out <- mnnCorrect(capture.output(cat(paste(gsub("^","mat_list$",names(mat_list)),collapse=", ")))
      Error in mnnCorrect(mat_list) : at least two batches must be specified

      library(dplyr)
      cat(paste(gsub("^","mat_list$",names(mat_list)),collapse=", ") %>% mnnCorrect(.)
      mat_list$Mat1, mat_list$Mat2Error in mnnCorrect(.) : at least two batches must be specified


      Is there a way to achieve this?










      share|improve this question















      I am trying to use the R mnnCorrect function (from the scran package). It requires at least 2 input matrices to work.



      # install package
      source("https://bioconductor.org/biocLite.R"); biocLite("scran")
      # example matrix 1
      B1 <- matrix(rnorm(10000), ncol=50)
      # example matrix 2
      B2 <- matrix(rnorm(10000), ncol=50)
      # function below works fine
      out <- mnnCorrect(B1, B2)


      However, I am trying to supply these matrices as a list like so (more convenient for automating the process with a variable number of matrices):



      mat_list=list()
      mat_list[["Mat1"]]=B1
      mat_list[["Mat2"]]=B2
      str(mat_list)
      List of 2
      $ Mat1: num [1:200, 1:50] 1.107 -0.828 1.559 -1.353 0.667 ...
      $ Mat2: num [1:200, 1:50] -0.231 0.894 0.369 1.606 -1.346 ...

      # This works fine
      out <- mnnCorrect(mat_list$Mat1, mat_list$Mat2)

      # These do not work
      out <- mnnCorrect(mat_list)
      Error in mnnCorrect(mat_list) : at least two batches must be specified

      out <- mnnCorrect(cat(paste(gsub("^","mat_list$",names(mat_list)),collapse=", "))
      Error in mnnCorrect(mat_list) : at least two batches must be specified

      out <- mnnCorrect(capture.output(cat(paste(gsub("^","mat_list$",names(mat_list)),collapse=", ")))
      Error in mnnCorrect(mat_list) : at least two batches must be specified

      library(dplyr)
      cat(paste(gsub("^","mat_list$",names(mat_list)),collapse=", ") %>% mnnCorrect(.)
      mat_list$Mat1, mat_list$Mat2Error in mnnCorrect(.) : at least two batches must be specified


      Is there a way to achieve this?







      r list matrix






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 22 at 8:15

























      asked Nov 22 at 8:12









      user31888

      937




      937
























          1 Answer
          1






          active

          oldest

          votes

















          up vote
          1
          down vote



          accepted










          In R, you use the function do.call for that. Here is an example:



          do.call(mnnCorrect, mat_list)


          See also the help page ?do.call .






          share|improve this answer





















          • Works great, thanks !
            – user31888
            Nov 22 at 8:34











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53426441%2fr-passing-a-single-list-of-matrices-as-input-to-a-function-that-requires-at-lea%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes








          up vote
          1
          down vote



          accepted










          In R, you use the function do.call for that. Here is an example:



          do.call(mnnCorrect, mat_list)


          See also the help page ?do.call .






          share|improve this answer





















          • Works great, thanks !
            – user31888
            Nov 22 at 8:34















          up vote
          1
          down vote



          accepted










          In R, you use the function do.call for that. Here is an example:



          do.call(mnnCorrect, mat_list)


          See also the help page ?do.call .






          share|improve this answer





















          • Works great, thanks !
            – user31888
            Nov 22 at 8:34













          up vote
          1
          down vote



          accepted







          up vote
          1
          down vote



          accepted






          In R, you use the function do.call for that. Here is an example:



          do.call(mnnCorrect, mat_list)


          See also the help page ?do.call .






          share|improve this answer












          In R, you use the function do.call for that. Here is an example:



          do.call(mnnCorrect, mat_list)


          See also the help page ?do.call .







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 22 at 8:30









          Thriving For Perfection

          517




          517












          • Works great, thanks !
            – user31888
            Nov 22 at 8:34


















          • Works great, thanks !
            – user31888
            Nov 22 at 8:34
















          Works great, thanks !
          – user31888
          Nov 22 at 8:34




          Works great, thanks !
          – user31888
          Nov 22 at 8:34


















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.





          Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


          Please pay close attention to the following guidance:


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53426441%2fr-passing-a-single-list-of-matrices-as-input-to-a-function-that-requires-at-lea%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          A CLEAN and SIMPLE way to add appendices to Table of Contents and bookmarks

          Calculate evaluation metrics using cross_val_predict sklearn

          Insert data from modal to MySQL (multiple modal on website)