使用R中的paste()创建函数名称

时间:2013-02-16 22:08:18

标签: r function

我想做以下

X = matrix(0, nrow = p, ncol = N)
p=5
N=100
for (i in 1:N)
{
X[1,i] = e1(t[i])
X[2,i] = e2(t[i])
X[3,i] = e3(t[i])
X[4,i] = e4(t[i])
X[5,i] = e5(t[i])
}

其中e1()。 e2(),e3(),e4()和e5()是特定的函数。

我尝试过以下代码:

for(j in 1:p)
{
for (i in 1:N)
{
    X[j,i] = as.symbol(paste("e", j, sep = ""))(t[i])
}
}

但它不起作用。

感谢您的帮助

卡罗尔

2 个答案:

答案 0 :(得分:2)

一种方法是使用do.call

R> myfun <- function(x) print(x)
R> do.call(paste0("my","fun"), list("foo"))
[1] "foo"

do.call的第一个参数是函数的名称(这里可以使用paste),第二个是要传递的参数列表。

答案 1 :(得分:2)

您需要功能get

for(j in 1:p)
{
for (i in 1:N)
{
    X[j,i] = get(paste("e", j, sep = ""))(t[i])
}
}

如果e1(etc)是矢量化的,你可以删除其中一个循环:

for (j in 1:p) {
  X[j,] = get(paste0("e", j))(t)
}