R中函数的动态变量名

时间:2016-11-04 08:55:53

标签: r variables vector rename

我正在寻找一个函数,它将一个向量作为输入,用向量做一些简单的算术,并调用新的向量,它由一个集合字符串(比如“log。”)加上原始的向量名称组成。

d = c(1 2, 3)
my.function <- function { x
x2 <- log(x)
...

我希望函数返回一个名为log.d的向量(也就是说,不是log.x或者是设置的东西,而是依赖于向量输入的名称作为x的东西)。

2 个答案:

答案 0 :(得分:2)

您可以尝试下一步:

d = c(1, 2, 3)

my.function <- function(x){
    x2 <- log(x)

    arg_name <- deparse(substitute(x)) # Get argument name
    var_name <- paste("log", arg_name, sep="_") # Construct the name
    assign(var_name, x2, env=.GlobalEnv) # Assign values to variable
    # variable will be created in .GlobalEnv 
}

答案 1 :(得分:0)

执行此操作的一种方法是单独存储所有输入矢量名称的名称,然后将它们传递给assign函数。就像assign获取输出对象名称的文本字符串一样,get从字符串中查找对象。

我假设你的矢量都遵循共同的模式,并从&#34; d&#34;开始,使它尽可能地动态。

d1 <- c(1,2,3)
d2 <- c(2,3,4)

vec_names <- ls(pattern = "^d")

log_vec <- function(x){
  log(x)
}

sapply(vec_names, function(x) assign(paste0("log.", x), log_vec(get(x)), envir = globalenv()))

这应该创建两个新对象&#34; log.d1&#34;和&#34; log.d2&#34;。