假设我有:
a_1 <- 2
a_2 <- 5
a_3 <- 7
my.foo <- function (input) {print(input^2)}
我的目标是将名称以a_
开头的所有对象作为my.foo()
参数传递(因此在示例中a_1
,a_2
和a_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_1
,a_2
和a_3
放入列表对象,然后使用apply
函数,但没有太大成功。
谢谢, 斯特凡诺
答案 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
,因为它会导致使用这些示例进行双重打印。