构造一个循环over函数,apply不起作用。

时间:2011-07-27 21:47:24

标签: r for-loop

我是R的新手,我想为50个不同的数据(滚动调用类)运行一个特定的函数(理想来自pscl包),后缀从1到50,我想保存结果在对象中也有1到50个后缀,但我不能这样做。

apply不起作用,因为我需要在理想函数中指定其他参数,我已经尝试创建一个新函数来设置附加参数并允许仅使用数据指定函数,但它在第二步(不识别对象)。

我有我的函数的数据对象:rc.1,rc.2,...,rc.50 并尝试执行以下操作 - 密切关注我将如何在Stata中执行此操作...

for (i in 1:3) {
    est.leg[i]<-ideal(rc[i], maxiter=1000, burnin=500, thin=10, normalize=TRUE)
}

它没有在rc [i]中评估,说“找不到对象'rc”

我也尝试过:

loop.ideal<- function(zz){ 
   ideal(zz, d=1, maxiter=100, burnin=50, thin=10, normalize=TRUE)
}

但是在测试函数时,它不适用于迭代。

我真的很感激任何帮助!!!!

2 个答案:

答案 0 :(得分:7)

正如加文所说。

您可以遍历对象的名称,例如:

object.names <- paste("rc",1:50,sep=".")

更好的是学会使用列表。您可以使用lapply

制作对象列表
object.list <- lapply(object.names,get)

这个将在名单上的每个名称上使用函数get。 lapply返回一个列表,所以你有一个对象列表。

如果函数正确,您可以再次对ideal函数使用相同的技巧:

est.leg <- lapply(object.list,ideal , maxiter=1000, burnin=500, 
                  thin=10, normalize=TRUE)

这应该给出正确的解决方案。

答案 1 :(得分:3)

可以将额外的参数传递给apply(),请参阅...中的?apply参数。如果你写的是正确的,你没有对象rc[i],你有rc.i其中i实际上是一个整数。 [用于对对象进行子集化,因此您的代码要求i对象的rc组件。您似乎想要检索名称为rc.ii替换为整数的对象。

在不了解rc等详情的情况下,您可以尝试get(paste("rc.", i, sep = ""))代替rc[i]