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

Ste*_*rdi 2 r function apply

假设我有:

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

my.foo <- function (input) {print(input^2)}
Run Code Online (Sandbox Code Playgroud)

我的目标是传递名称以a_as my.foo()参数开头的所有对象(因此在示例中a_1,a_2a_3).

以下代码按预期工作:

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

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

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

我想知道是否有更直接的方法来解决这个问题.我试图把a_1,a_2a_3在列表中的对象,然后使用apply功能,但不是很成功.

谢谢,斯特凡诺

A5C*_*2T1 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
Run Code Online (Sandbox Code Playgroud)

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