迭代地分配具有类似名称的对象作为函数参数,摆脱-eval(parse()) -

时间:2014-04-19 02:16:03

标签: r function apply

假设我有:

a_1 <- 2
a_2 <- 5
a_3 <- 7

my.foo <- function (input) {print(input^2)}

我的目标是将名称以a_开头的所有对象作为my.foo()参数传递(因此在示例中a_1a_2a_3 )。

以下代码按预期工作:

n <- length(ls(pattern = "a_")) 

for (i in 1:n) {  
    A <- paste("a_",i,sep="")
    my.foo(input=eval(parse(text=A)))
}

我的感觉是,这并不是真正的“优雅”......就像“强迫”R以更简单的方式(通过宏变量)做我能用Stata做的事情。

我想知道是否有更直接的方法来解决这个问题。我尝试将a_1a_2a_3放入列表对象,然后使用apply函数,但没有太大成功。

谢谢, 斯特凡诺

1 个答案:

答案 0 :(得分:5)

请尝试以下方法之一:

my.foo <- function (input) input^2
sapply(ls(pattern = "a_"), function(x) my.foo(get(x)))
# a_1 a_2 a_3 
#   4  25  49 
sapply(list(a_1, a_2, a_3), my.foo)
# [1]  4 25 49

我从您的函数中删除了print,因为它会导致使用这些示例进行双重打印。