检索作为字符串传递给函数的参数值

时间:2016-08-18 06:59:58

标签: r string list function

我有一个很大的变量/数据框列表,这些变量/数据框以易于识别的方式命名。

例如_big_list = list(runner5_data, runner11_data, runner83_data)等等。

我想执行一个循环,我将这些数据帧中的每一个转储到一个函数中,然后它也可以获取我的参数值的名称,并将其添加为新列,例如....

最后我想把它还给一个新的清单......

place_holder_list = list()
my_funct = function(data_from_list) {
                    df$helpme = dQuote(data_from_list) # or something similar?     
                    # so df$helpme = 'iris' or 'mtcars', etc
                    # do other stuff
                    return(df)
}

ex_list = list(iris, mtcars)
for (each_df in ex_list){
    my_funct(each_df)   #help appending to list...new column in df should be iris$helpme = 'iris'
}

1 个答案:

答案 0 :(得分:0)

使用Map

可以轻松完成此操作
ex_list1 <- Map(cbind, ex_list, helpme = c("iris", "mtcars"))
lapply(ex_list1, head, 2)
#[[1]]
#  Sepal.Length Sepal.Width Petal.Length Petal.Width Species helpme
#1          5.1         3.5          1.4         0.2  setosa   iris
#2          4.9         3.0          1.4         0.2  setosa   iris

#[[2]]
#              mpg cyl disp  hp drat    wt  qsec vs am gear carb helpme
#Mazda RX4      21   6  160 110  3.9 2.620 16.46  0  1    4    4 mtcars
#Mazda RX4 Wag  21   6  160 110  3.9 2.875 17.02  0  1    4    4 mtcars

如果需要,我们可以创建一个函数来执行此操作

f1 <- function(...) {
       dots <- substitute(list(...))[-1]
       helpme <- unlist(sapply(dots, deparse))
       lst <- list(...)
       Map(cbind, lst, helpme = helpme)
}

f1(mtcars)
f1(iris, mtcars)