R、 正确使用粘贴功能

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

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


正确的方法是什么?

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

围绕粘贴功能包装
get(.)
,您就可以完成以下设置:

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

也就是说,我会极力反对这种方法。 相反,请使用
列表

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]])
}

bond我建议在这里避免使用
for
循环,并避免提前分配内存。例如,使用
replicate
并将所有对象保存在一个列表中,这是一种很好的方法

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)
复制(13{

bond听起来像是你的
函数2
出了问题,而不是
粘贴
或循环。@Thomas,问题是
bondi
没有通过,而是
“bondi”一般来说,如果你用变量来命名变量,那么你做的是错误的,或者至少是最佳的。我推荐李嘉图的替代品!同时,考虑使用(并且做出贡献)<代码> MultSimule包:-巧妙地使用<代码>复制< /代码>,但是我不确定这个具体的例子是“R方式”。关于做事情。你认为访问结果比在两个单独的对象中绑定和分散要简单得多。如果你将结果分配给它们,那么通过避免内存分配而获得的任何效率提高都会被抛到窗外。@Ricardosporta我不确定你在这里的观点。复制的结果是这是一个列表。比如说ll。我认为2个对象(bond和spread是相关的),因此像ll[1]$bond/ll[1]$spread这样访问它们比bond[1]和spread[1]更安全。这也是一种R方式,因为
复制
(通常是Lappy家族)这里可以避免因
而引起的任何副作用。这里也不解释为什么“高度”反对使用
get
?我并不是说使用
get
是好的,但我个人认为在这里使用
for循环比使用
get
更危险。你认为使用for循环比使用get更危险吗?我很好奇,对你来说,这是为什么。
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)