3

这个循环正确地创建了 13 个名为 bond1,...,bond13 的 df,并为它们分配了来自 function1 的值。现在我需要使用 function2 和另外两个 df 再创建 13 个名为 spread1, ..., spread13 的 DF。其中一个对于所有 13 个点差 (DF_B) 都是固定的,但对于 spreadi,我需要bondi,代码中的第二行给了我以下错误:“加载所需的包:sqliteExecStatement 中的 tcltk 错误(con,statement,bind.data ) : RS-DBI 驱动程序: (语句中的错误: 没有这样的表: 键)"

for(i in 1:13) 
{
  assign(paste("bond", i, sep = ""), function1(DF_A))
  assign(paste("spread", i, sep = ""), function2(DF_B, paste("bond", i, sep = "")))
}

这样做的正确方法是什么?

4

2 回答 2

9

在 function2 中,您传递一个字符串作为参数,而不是您的实际数据对象。

环绕get(.)粘贴功能,一切就绪:

function2(DF_B, get( paste("bond", i, sep = "") ) )

话虽如此,我强烈建议不要使用这种方法。

相反,使用list

bond <- vector("list", 13)
spread <- vector("list", 13)

for(i in 1:13) 
{
  bond[[i]]   <- function1(DF_A)
  spread[[i]] <- function2(DF_B, bond[[i]])
}
于 2013-10-05T19:16:01.017 回答
2

我建议避免for在此处使用循环并避免提前分配内存。例如,使用replicate并将所有对象保存在一个列表中是 R 做事的方式。

replicate(13,{
   bond   <- function1(DF_A)     ## Note here all your bonds are the same...
   spread <- function2(DF_B, bond)
   list(bond=bond,spread=spread)
},simplify=FALSE)
于 2013-10-05T21:26:13.900 回答