使用R中的函数调用对象

时间:2015-07-19 13:17:35

标签: r

我有R对象:

    "debt_30_06_2010" "debt_30_06_2011" "debt_30_06_2012" ...

需要使用函数调用它们:

    paste0("debt_",date) ## "date" being another object

问题在于,当我将调用分配给另一个对象时,它只需要名称而不是内容:

    debt_a <- paste0("endeud_", date1)
    > debt_a
    [1] "debt_30_06_2014"

我尝试使用“assign”功能但没有成功:

    assign("debt_a", paste0("debt_", date))
    > debt_a
    [1] "debt_30_06_2014"

我想知道有任何方法可以完成这项任务。

2 个答案:

答案 0 :(得分:3)

我们可以使用get来获取对象的值。如果有多个对象,请使用mget。例如,我在assign'债务_a'的值为'debt_30_06_2010'

 assign('debt_a', get(paste0('debt_', date[1])))
 debt_a
 #[1] 1 2 3 4 5

mget返回list。因此,如果我们将'debt_a'分配给多个对象,

 assign('debt_a', mget(paste0('debt_', date)))
 debt_a
 #$debt_30_06_2010
 #[1] 1 2 3 4 5

 #$debt_30_06_2011
 #[1]  6  7  8  9 10

数据

debt_30_06_2010 <- 1:5
debt_30_06_2011 <- 6:10
date <- c('30_06_2010', '30_06_2011')

答案 1 :(得分:1)

我不确定我是否正确理解了您的问题,但我怀疑您的对象是函数的名称,并且您希望将这些名称构造为字符以使用这些函数。如果是这种情况,这个例子可能会有所帮助:

myfun <- function(x){sin(x)**2}
mychar <- paste0("my", "fun")
eval(call(mychar, x = pi / 4))
#[1] 0.5
#> identical(eval(call(mychar, x = pi / 4)), myfun(pi / 4))
#[1] TRUE