这个循环正确地创建了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 = "")))
}
这样做的正确方法是什么?
答案 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)