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












1















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





























    1















    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



























      1












      1








      1








      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 '18 at 8:15







      user31888

















      asked Nov 22 '18 at 8:12









      user31888user31888

      1007




      1007
























          1 Answer
          1






          active

          oldest

          votes


















          1














          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 '18 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',
          autoActivateHeartbeat: false,
          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









          1














          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 '18 at 8:34
















          1














          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 '18 at 8:34














          1












          1








          1







          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 '18 at 8:30









          Thriving For PerfectionThriving For Perfection

          517




          517













          • Works great, thanks !

            – user31888
            Nov 22 '18 at 8:34



















          • Works great, thanks !

            – user31888
            Nov 22 '18 at 8:34

















          Works great, thanks !

          – user31888
          Nov 22 '18 at 8:34





          Works great, thanks !

          – user31888
          Nov 22 '18 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.




          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

          MongoDB - Not Authorized To Execute Command

          How to fix TextFormField cause rebuild widget in Flutter

          Npm cannot find a required file even through it is in the searched directory