Error: target of assignment expands to non-language object





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







0















I am trying to dynamically clean up some column names for a large number of tables and I get the above error.



I have a gut feeling that I should be using quo but I have no idea on how to do that.



Any ideas?



The apply_alias applies a set of business rules to clean the names.



apply_alias <-  function(l){
which(l=="Geography")
l[which(l=="Geography")] <- "GEO"

toupper(l)
}


The cleanup_column_names_tbl applies the alias_function to a list of table



cleanup_column_names_tbl <- function(PID){
for(p in PID){
names(get(paste0("tbl_",p))) <- apply_alias(names(get(paste0("tbl_",p))))
}
}

cleanup_column_names_tbl("14100287")


When I try to run it i get the following error message:



> cleanup_column_names_tbl("14100287")
Error in names(get(paste0("tbl_", p))) <- apply_alias(names(get(paste0("tbl_", :
target of assignment expands to non-language object


Sample data:



> dput(tbl_14100287[1,])
structure(list(V1 = 0L, REF_DATE = "1976-01", GEO = "Canada",
DGUID = "2016A000011124", `Labour force characteristics` = "Population",
Sex = "Both sexes", `Age group` = "15 years and over", Statistics = "Estimate",
`Data type` = "Seasonally adjusted", UOM = "Persons", UOM_ID = 249L,
SCALAR_FACTOR = "thousands", SCALAR_ID = 3L, VECTOR = "v2062809",
COORDINATE = "1.1.1.1.1.1", VALUE = 16852.4, STATUS = "",
SYMBOL = NA, TERMINATED = NA, DECIMALS = 1L), class = c("data.table",
"data.frame"), row.names = c(NA, -1L), .internal.selfref = <pointer: 0x000002123cf21ef0>)









share|improve this question























  • Possible duplicate of Error in <my code> : target of assignment expands to non-language object

    – Mankind_008
    Jan 4 at 17:26


















0















I am trying to dynamically clean up some column names for a large number of tables and I get the above error.



I have a gut feeling that I should be using quo but I have no idea on how to do that.



Any ideas?



The apply_alias applies a set of business rules to clean the names.



apply_alias <-  function(l){
which(l=="Geography")
l[which(l=="Geography")] <- "GEO"

toupper(l)
}


The cleanup_column_names_tbl applies the alias_function to a list of table



cleanup_column_names_tbl <- function(PID){
for(p in PID){
names(get(paste0("tbl_",p))) <- apply_alias(names(get(paste0("tbl_",p))))
}
}

cleanup_column_names_tbl("14100287")


When I try to run it i get the following error message:



> cleanup_column_names_tbl("14100287")
Error in names(get(paste0("tbl_", p))) <- apply_alias(names(get(paste0("tbl_", :
target of assignment expands to non-language object


Sample data:



> dput(tbl_14100287[1,])
structure(list(V1 = 0L, REF_DATE = "1976-01", GEO = "Canada",
DGUID = "2016A000011124", `Labour force characteristics` = "Population",
Sex = "Both sexes", `Age group` = "15 years and over", Statistics = "Estimate",
`Data type` = "Seasonally adjusted", UOM = "Persons", UOM_ID = 249L,
SCALAR_FACTOR = "thousands", SCALAR_ID = 3L, VECTOR = "v2062809",
COORDINATE = "1.1.1.1.1.1", VALUE = 16852.4, STATUS = "",
SYMBOL = NA, TERMINATED = NA, DECIMALS = 1L), class = c("data.table",
"data.frame"), row.names = c(NA, -1L), .internal.selfref = <pointer: 0x000002123cf21ef0>)









share|improve this question























  • Possible duplicate of Error in <my code> : target of assignment expands to non-language object

    – Mankind_008
    Jan 4 at 17:26














0












0








0








I am trying to dynamically clean up some column names for a large number of tables and I get the above error.



I have a gut feeling that I should be using quo but I have no idea on how to do that.



Any ideas?



The apply_alias applies a set of business rules to clean the names.



apply_alias <-  function(l){
which(l=="Geography")
l[which(l=="Geography")] <- "GEO"

toupper(l)
}


The cleanup_column_names_tbl applies the alias_function to a list of table



cleanup_column_names_tbl <- function(PID){
for(p in PID){
names(get(paste0("tbl_",p))) <- apply_alias(names(get(paste0("tbl_",p))))
}
}

cleanup_column_names_tbl("14100287")


When I try to run it i get the following error message:



> cleanup_column_names_tbl("14100287")
Error in names(get(paste0("tbl_", p))) <- apply_alias(names(get(paste0("tbl_", :
target of assignment expands to non-language object


Sample data:



> dput(tbl_14100287[1,])
structure(list(V1 = 0L, REF_DATE = "1976-01", GEO = "Canada",
DGUID = "2016A000011124", `Labour force characteristics` = "Population",
Sex = "Both sexes", `Age group` = "15 years and over", Statistics = "Estimate",
`Data type` = "Seasonally adjusted", UOM = "Persons", UOM_ID = 249L,
SCALAR_FACTOR = "thousands", SCALAR_ID = 3L, VECTOR = "v2062809",
COORDINATE = "1.1.1.1.1.1", VALUE = 16852.4, STATUS = "",
SYMBOL = NA, TERMINATED = NA, DECIMALS = 1L), class = c("data.table",
"data.frame"), row.names = c(NA, -1L), .internal.selfref = <pointer: 0x000002123cf21ef0>)









share|improve this question














I am trying to dynamically clean up some column names for a large number of tables and I get the above error.



I have a gut feeling that I should be using quo but I have no idea on how to do that.



Any ideas?



The apply_alias applies a set of business rules to clean the names.



apply_alias <-  function(l){
which(l=="Geography")
l[which(l=="Geography")] <- "GEO"

toupper(l)
}


The cleanup_column_names_tbl applies the alias_function to a list of table



cleanup_column_names_tbl <- function(PID){
for(p in PID){
names(get(paste0("tbl_",p))) <- apply_alias(names(get(paste0("tbl_",p))))
}
}

cleanup_column_names_tbl("14100287")


When I try to run it i get the following error message:



> cleanup_column_names_tbl("14100287")
Error in names(get(paste0("tbl_", p))) <- apply_alias(names(get(paste0("tbl_", :
target of assignment expands to non-language object


Sample data:



> dput(tbl_14100287[1,])
structure(list(V1 = 0L, REF_DATE = "1976-01", GEO = "Canada",
DGUID = "2016A000011124", `Labour force characteristics` = "Population",
Sex = "Both sexes", `Age group` = "15 years and over", Statistics = "Estimate",
`Data type` = "Seasonally adjusted", UOM = "Persons", UOM_ID = 249L,
SCALAR_FACTOR = "thousands", SCALAR_ID = 3L, VECTOR = "v2062809",
COORDINATE = "1.1.1.1.1.1", VALUE = 16852.4, STATUS = "",
SYMBOL = NA, TERMINATED = NA, DECIMALS = 1L), class = c("data.table",
"data.frame"), row.names = c(NA, -1L), .internal.selfref = <pointer: 0x000002123cf21ef0>)






r






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Jan 4 at 16:57









Jrakru56Jrakru56

619212




619212













  • Possible duplicate of Error in <my code> : target of assignment expands to non-language object

    – Mankind_008
    Jan 4 at 17:26



















  • Possible duplicate of Error in <my code> : target of assignment expands to non-language object

    – Mankind_008
    Jan 4 at 17:26

















Possible duplicate of Error in <my code> : target of assignment expands to non-language object

– Mankind_008
Jan 4 at 17:26





Possible duplicate of Error in <my code> : target of assignment expands to non-language object

– Mankind_008
Jan 4 at 17:26












2 Answers
2






active

oldest

votes


















0














You cannot assign a value to get since there is no function get<-. The right way of doing it would be something like the following.



apply_alias <-  function(l){
l[which(l == "Geography")] <- "GEO"
toupper(l)
}

cleanup_column_names_tbl <- function(PID, envir = .GlobalEnv){
pid_full <- paste0("tbl_", PID)
res <- lapply(pid_full, function(p){
nms <- apply_alias(names(get(p)))
DF <- get(p)
names(DF) <- nms
DF
})
names(res) <- pid_full
list2env(res, envir = envir)
invisible(NULL)
}


cleanup_column_names_tbl("14100287")

names(tbl_14100287)
# [1] "V1" "REF_DATE"
# [3] "GEO" "DGUID"
# [5] "LABOUR FORCE CHARACTERISTICS" "SEX"
# [7] "AGE GROUP" "STATISTICS"
# [9] "DATA TYPE" "UOM"
#[11] "UOM_ID" "SCALAR_FACTOR"
#[13] "SCALAR_ID" "VECTOR"
#[15] "COORDINATE" "VALUE"
#[17] "STATUS" "SYMBOL"
#[19] "TERMINATED" "DECIMALS"





share|improve this answer































    0














    My solution:



    Creating and expression and evaluating it. It is short but somehow does not feel like it is the proper way of doing things since I am breaking away from the functional paradigm of R.



    cleanup_column_names_tbl <- function(PID){
    for(p in PID){
    expr1 <- paste0("names(", paste0("tbl_",p), ") <- apply_alias(names(", paste0("tbl_",p),"))")
    eval(rlang::parse_expr(expr1))
    }
    }


    Edit:



    A slightly different way that:




    • avoids using strings

    • a little more flexible since it allows the use of strings and symbol


    library(rlang)
    test_df <- data.frame(a=1:10,b=1:10)
    test_df2 <- data.frame(a=1:10,b=1:10)


    fix_names <- function(df){

    x <- ensym(df)
    expr1 <- expr(names(!!x) <- toupper(names(!!x)))
    eval(expr1, envir = parent.env(environment()))
    # expr1
    }

    fix_names(test_df)
    fix_names("test_df2")

    names(test_df)
    #> [1] "A" "B"
    names(test_df2)
    #> [1] "A" "B"





    share|improve this answer


























      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%2f54043141%2ferror-target-of-assignment-expands-to-non-language-object%23new-answer', 'question_page');
      }
      );

      Post as a guest















      Required, but never shown

























      2 Answers
      2






      active

      oldest

      votes








      2 Answers
      2






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      0














      You cannot assign a value to get since there is no function get<-. The right way of doing it would be something like the following.



      apply_alias <-  function(l){
      l[which(l == "Geography")] <- "GEO"
      toupper(l)
      }

      cleanup_column_names_tbl <- function(PID, envir = .GlobalEnv){
      pid_full <- paste0("tbl_", PID)
      res <- lapply(pid_full, function(p){
      nms <- apply_alias(names(get(p)))
      DF <- get(p)
      names(DF) <- nms
      DF
      })
      names(res) <- pid_full
      list2env(res, envir = envir)
      invisible(NULL)
      }


      cleanup_column_names_tbl("14100287")

      names(tbl_14100287)
      # [1] "V1" "REF_DATE"
      # [3] "GEO" "DGUID"
      # [5] "LABOUR FORCE CHARACTERISTICS" "SEX"
      # [7] "AGE GROUP" "STATISTICS"
      # [9] "DATA TYPE" "UOM"
      #[11] "UOM_ID" "SCALAR_FACTOR"
      #[13] "SCALAR_ID" "VECTOR"
      #[15] "COORDINATE" "VALUE"
      #[17] "STATUS" "SYMBOL"
      #[19] "TERMINATED" "DECIMALS"





      share|improve this answer




























        0














        You cannot assign a value to get since there is no function get<-. The right way of doing it would be something like the following.



        apply_alias <-  function(l){
        l[which(l == "Geography")] <- "GEO"
        toupper(l)
        }

        cleanup_column_names_tbl <- function(PID, envir = .GlobalEnv){
        pid_full <- paste0("tbl_", PID)
        res <- lapply(pid_full, function(p){
        nms <- apply_alias(names(get(p)))
        DF <- get(p)
        names(DF) <- nms
        DF
        })
        names(res) <- pid_full
        list2env(res, envir = envir)
        invisible(NULL)
        }


        cleanup_column_names_tbl("14100287")

        names(tbl_14100287)
        # [1] "V1" "REF_DATE"
        # [3] "GEO" "DGUID"
        # [5] "LABOUR FORCE CHARACTERISTICS" "SEX"
        # [7] "AGE GROUP" "STATISTICS"
        # [9] "DATA TYPE" "UOM"
        #[11] "UOM_ID" "SCALAR_FACTOR"
        #[13] "SCALAR_ID" "VECTOR"
        #[15] "COORDINATE" "VALUE"
        #[17] "STATUS" "SYMBOL"
        #[19] "TERMINATED" "DECIMALS"





        share|improve this answer


























          0












          0








          0







          You cannot assign a value to get since there is no function get<-. The right way of doing it would be something like the following.



          apply_alias <-  function(l){
          l[which(l == "Geography")] <- "GEO"
          toupper(l)
          }

          cleanup_column_names_tbl <- function(PID, envir = .GlobalEnv){
          pid_full <- paste0("tbl_", PID)
          res <- lapply(pid_full, function(p){
          nms <- apply_alias(names(get(p)))
          DF <- get(p)
          names(DF) <- nms
          DF
          })
          names(res) <- pid_full
          list2env(res, envir = envir)
          invisible(NULL)
          }


          cleanup_column_names_tbl("14100287")

          names(tbl_14100287)
          # [1] "V1" "REF_DATE"
          # [3] "GEO" "DGUID"
          # [5] "LABOUR FORCE CHARACTERISTICS" "SEX"
          # [7] "AGE GROUP" "STATISTICS"
          # [9] "DATA TYPE" "UOM"
          #[11] "UOM_ID" "SCALAR_FACTOR"
          #[13] "SCALAR_ID" "VECTOR"
          #[15] "COORDINATE" "VALUE"
          #[17] "STATUS" "SYMBOL"
          #[19] "TERMINATED" "DECIMALS"





          share|improve this answer













          You cannot assign a value to get since there is no function get<-. The right way of doing it would be something like the following.



          apply_alias <-  function(l){
          l[which(l == "Geography")] <- "GEO"
          toupper(l)
          }

          cleanup_column_names_tbl <- function(PID, envir = .GlobalEnv){
          pid_full <- paste0("tbl_", PID)
          res <- lapply(pid_full, function(p){
          nms <- apply_alias(names(get(p)))
          DF <- get(p)
          names(DF) <- nms
          DF
          })
          names(res) <- pid_full
          list2env(res, envir = envir)
          invisible(NULL)
          }


          cleanup_column_names_tbl("14100287")

          names(tbl_14100287)
          # [1] "V1" "REF_DATE"
          # [3] "GEO" "DGUID"
          # [5] "LABOUR FORCE CHARACTERISTICS" "SEX"
          # [7] "AGE GROUP" "STATISTICS"
          # [9] "DATA TYPE" "UOM"
          #[11] "UOM_ID" "SCALAR_FACTOR"
          #[13] "SCALAR_ID" "VECTOR"
          #[15] "COORDINATE" "VALUE"
          #[17] "STATUS" "SYMBOL"
          #[19] "TERMINATED" "DECIMALS"






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Jan 4 at 17:42









          Rui BarradasRui Barradas

          18.4k51833




          18.4k51833

























              0














              My solution:



              Creating and expression and evaluating it. It is short but somehow does not feel like it is the proper way of doing things since I am breaking away from the functional paradigm of R.



              cleanup_column_names_tbl <- function(PID){
              for(p in PID){
              expr1 <- paste0("names(", paste0("tbl_",p), ") <- apply_alias(names(", paste0("tbl_",p),"))")
              eval(rlang::parse_expr(expr1))
              }
              }


              Edit:



              A slightly different way that:




              • avoids using strings

              • a little more flexible since it allows the use of strings and symbol


              library(rlang)
              test_df <- data.frame(a=1:10,b=1:10)
              test_df2 <- data.frame(a=1:10,b=1:10)


              fix_names <- function(df){

              x <- ensym(df)
              expr1 <- expr(names(!!x) <- toupper(names(!!x)))
              eval(expr1, envir = parent.env(environment()))
              # expr1
              }

              fix_names(test_df)
              fix_names("test_df2")

              names(test_df)
              #> [1] "A" "B"
              names(test_df2)
              #> [1] "A" "B"





              share|improve this answer






























                0














                My solution:



                Creating and expression and evaluating it. It is short but somehow does not feel like it is the proper way of doing things since I am breaking away from the functional paradigm of R.



                cleanup_column_names_tbl <- function(PID){
                for(p in PID){
                expr1 <- paste0("names(", paste0("tbl_",p), ") <- apply_alias(names(", paste0("tbl_",p),"))")
                eval(rlang::parse_expr(expr1))
                }
                }


                Edit:



                A slightly different way that:




                • avoids using strings

                • a little more flexible since it allows the use of strings and symbol


                library(rlang)
                test_df <- data.frame(a=1:10,b=1:10)
                test_df2 <- data.frame(a=1:10,b=1:10)


                fix_names <- function(df){

                x <- ensym(df)
                expr1 <- expr(names(!!x) <- toupper(names(!!x)))
                eval(expr1, envir = parent.env(environment()))
                # expr1
                }

                fix_names(test_df)
                fix_names("test_df2")

                names(test_df)
                #> [1] "A" "B"
                names(test_df2)
                #> [1] "A" "B"





                share|improve this answer




























                  0












                  0








                  0







                  My solution:



                  Creating and expression and evaluating it. It is short but somehow does not feel like it is the proper way of doing things since I am breaking away from the functional paradigm of R.



                  cleanup_column_names_tbl <- function(PID){
                  for(p in PID){
                  expr1 <- paste0("names(", paste0("tbl_",p), ") <- apply_alias(names(", paste0("tbl_",p),"))")
                  eval(rlang::parse_expr(expr1))
                  }
                  }


                  Edit:



                  A slightly different way that:




                  • avoids using strings

                  • a little more flexible since it allows the use of strings and symbol


                  library(rlang)
                  test_df <- data.frame(a=1:10,b=1:10)
                  test_df2 <- data.frame(a=1:10,b=1:10)


                  fix_names <- function(df){

                  x <- ensym(df)
                  expr1 <- expr(names(!!x) <- toupper(names(!!x)))
                  eval(expr1, envir = parent.env(environment()))
                  # expr1
                  }

                  fix_names(test_df)
                  fix_names("test_df2")

                  names(test_df)
                  #> [1] "A" "B"
                  names(test_df2)
                  #> [1] "A" "B"





                  share|improve this answer















                  My solution:



                  Creating and expression and evaluating it. It is short but somehow does not feel like it is the proper way of doing things since I am breaking away from the functional paradigm of R.



                  cleanup_column_names_tbl <- function(PID){
                  for(p in PID){
                  expr1 <- paste0("names(", paste0("tbl_",p), ") <- apply_alias(names(", paste0("tbl_",p),"))")
                  eval(rlang::parse_expr(expr1))
                  }
                  }


                  Edit:



                  A slightly different way that:




                  • avoids using strings

                  • a little more flexible since it allows the use of strings and symbol


                  library(rlang)
                  test_df <- data.frame(a=1:10,b=1:10)
                  test_df2 <- data.frame(a=1:10,b=1:10)


                  fix_names <- function(df){

                  x <- ensym(df)
                  expr1 <- expr(names(!!x) <- toupper(names(!!x)))
                  eval(expr1, envir = parent.env(environment()))
                  # expr1
                  }

                  fix_names(test_df)
                  fix_names("test_df2")

                  names(test_df)
                  #> [1] "A" "B"
                  names(test_df2)
                  #> [1] "A" "B"






                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited Jan 5 at 16:12

























                  answered Jan 5 at 2:04









                  Jrakru56Jrakru56

                  619212




                  619212






























                      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%2f54043141%2ferror-target-of-assignment-expands-to-non-language-object%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

                      Monofisismo

                      Angular Downloading a file using contenturl with Basic Authentication

                      Olmecas