【问题标题】:Creating custom function to change row & col names for a dataframe in RStudio; wont run as expected创建自定义函数以更改 RStudio 中数据框的行和列名称;不会按预期运行
【发布时间】:2021-06-09 17:38:32
【问题描述】:

这里是初学者 R 用户。我正在练习制作自己的函数,并且我想制作一些可以减少为我保存的数据框重命名行/列的时间的东西。以下是我想出的:

data.change.rowcolnames <- function(datainenv, namerows, namecols) {
    row.names(datainenv) <- namerows 
    colnames(datainenv) <- namecols
}

基本上,“datainenv”是命名的数据框,“namerows”/“namecols”是包含所有我想要的行/列名称的向量。

这是我尝试使用上述函数运行的代码:

data.change.rowcolnames(inflam_01, inflam_01_pats, inflam_01_days)

当我运行它时,它不会更改行/列名称。但是,当我自己运行 row.names()colnames() 函数时,它们会运行。

这是我必须设置的所有内容,只是患者炎症的一些样本数据(没有违反 HIPAA!都是假的......)

inflam_01 <- read.csv("inflammation-01.csv", header = F) #can't attach file...but the dataframe was created correctly and I can see all the data.

使用我在网上找到的唯一 id 函数来帮助生成随机患者 ID:

   create_unique_ids <- function(n, seed_no = 2, char_len = 5){
  set.seed(seed_no)
  pool <- c(letters, LETTERS, 0:9) #sets the parameters for what the ID will contain
  
  res <- character(n) # pre-allocating vector is much faster than growing it
  for(i in seq(n)){
    this_res <- paste0(sample(pool, char_len, replace = TRUE), collapse = "")
    while(this_res %in% res){ # if there was a duplicate, redo
      this_res <- paste0(sample(pool, char_len, replace = TRUE), collapse = "")
    }
    res[i] <- this_res
  }
  res
}

使用该函数为以下向量生成 60 个 id:

inflam_01_pats <- c(create_unique_ids(60, 2, 10)) #used a function example for the "create_unique_ids";

为“日期名称”创建了一个带有数字 1-40 的向量

inflam_01_days <- c(1:40)

将它们加在一起,它似乎可以工作,因为它没有显示错误消息...但默认的列/行名称仍在 inflam_01 数据框中...

【问题讨论】:

  • 使用inflam_01 &lt;- data.change.rowcolnames(inflam_01, inflam_01_pats, inflam_01_days)是否有效?
  • 函数最后一行应该是datainenv或者return(datainenv)
  • 正如 rawr 所提到的,R 返回函数中最后一行的结果(除了特定的中断条件)。因此,您得到的是colnames(datainenv) &lt;- namecols 的结果。使用return(datainenv),您可以返回更改后的对象。
  • 好的,这是有道理的。我已经让它这样工作了。但现在如果只是在控制台中吐出它。如何让它在我的环境中保存新对象?换了个新名字?
  • 我找到了一种解决方法,但它并不像我希望的那样精简......我使用了inflam_01_named &lt;&lt;- data.change.rowcolnames(inflam_01, inflam_01_pats, inflam_01_days),这在我的环境中创建了一个新的 df。但是,你们都知道我如何在函数本身中做到这一点(提供输出的新名称作为参数)?

标签: r dataframe


【解决方案1】:

要么:

inflam_01_named <<- data.change.rowcolnames(inflam_01, inflam_01_pats, inflam_01_days)

inflam_01_named <- data.change.rowcolnames(inflam_01, inflam_01_pats, inflam_01_days)

工作。感谢您的帮助!

【讨论】:

    猜你喜欢
    • 2020-09-20
    • 1970-01-01
    • 2016-10-17
    • 2016-10-13
    • 2015-10-04
    • 2019-07-05
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多