【问题标题】:How can I make column name using argument name in a function in R?如何在 R 的函数中使用参数名称来创建列名?
【发布时间】:2021-04-25 13:23:36
【问题描述】:

这是一个数据集。

require(data.table) 
df <- data.table(a = c(1, 2, 3),
b = c(4, 5, 6))
   a b
1: 1 4
2: 2 5
3: 3 6

我想用我的函数创建几个列名。

这是一个示例函数。

f_test <- function(x){
  
  variableName <- eval(paste0("var_", x))
  
  df_1a <- df[, variableName := a * b *2 ]
}

例如,这是f_test("AAA")的预期结果

   a b var_AAA
1: 1 4     8
2: 2 5    20
3: 3 6    36

但是,函数输出不是'var_AAA',而是'variableName'。 如何根据函数中的字符串参数分配名称?

【问题讨论】:

    标签: r arguments


    【解决方案1】:

    除了包含新列名的字符值之外,我可能会考虑将整个 data.table 传递给函数。这可能比更改全局环境对象更好。此外,您可以只使用paste0 通过引用:= 来创建列名。

    library(data.table)
    
    dt <- data.table(a = c(1, 2, 3), b = c(4, 5, 6))
    
    f_test <- function(dt, var_name) {
      dt[ , paste0("var_", var_name) := a * b * 2]
      return(dt)
    }
    
    f_test(dt, "AAA")[]
    

    输出

       a b var_AAA
    1: 1 4       8
    2: 2 5      20
    3: 3 6      36
    

    【讨论】:

    • 这确实比我在下面给出的答案更好。 +1
    【解决方案2】:

    c() 与变量名结合使用:

    library(data.table)
    
    df <- data.table::data.table(a = 1:3, b = 1:3)
    
    f_test <- function(x){
      variableName <- eval(paste0("var_", x))
      df[, c(variableName) := a * b *2 ][]
    }
    
    f_test("AAA") 
    

    【讨论】:

      猜你喜欢
      • 2020-10-01
      • 1970-01-01
      • 2018-10-17
      • 1970-01-01
      • 1970-01-01
      • 2021-01-18
      • 1970-01-01
      • 2016-09-16
      • 1970-01-01
      相关资源
      最近更新 更多