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

Car*_*men 2 for-loop r

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

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

我有我的函数的数据对象: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)
}
Run Code Online (Sandbox Code Playgroud)

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

我也尝试过:

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

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

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

Jor*_*eys 7

正如加文所说.

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

object.names <- paste("rc",1:50,sep=".")
Run Code Online (Sandbox Code Playgroud)

更好的是学会使用列表.您可以使用制作对象列表lapply

object.list <- lapply(object.names,get)
Run Code Online (Sandbox Code Playgroud)

这个将使用get名称上列表中每个名称的函数.lapply返回一个列表,因此你有一个对象列表.

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

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

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

  • +1使用列表作为数据结构的建议很好. (3认同)