R,正确使用粘贴功能

时间:2013-10-05 19:05:49

标签: r

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

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 = "")))
}

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

2 个答案:

答案 0 :(得分: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]])
}

答案 1 :(得分:2)

我建议避免在这里使用for循环,并避免提前分配内存。例如,使用replicate并将所有对象保存在单个列表中是R-way。

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)