Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将列表中dataframe的名称传递给sqldf?_R_Sqldf - Fatal编程技术网

如何将列表中dataframe的名称传递给sqldf?

如何将列表中dataframe的名称传递给sqldf?,r,sqldf,R,Sqldf,我正在使用sqldf包注释几个数据帧。 注释数据位于数据框中。 我使用内部联接通过id值选择相应的信息 为了使流程自动化,我编写了以下代码: prepareAnnot <- function(x){ annoted <- sqldf("SELECT x.*, annot.* FROM x INNER JOIN annot ON x.id = annot.id;") return(annoted)} 如何正确地将列表中的数据帧名称传递给函数?我无法复制您的错误。另外,像这

我正在使用sqldf包注释几个数据帧。 注释数据位于数据框中。 我使用内部联接通过id值选择相应的信息

为了使流程自动化,我编写了以下代码:

prepareAnnot <- function(x){  
annoted <- sqldf("SELECT x.*, 
annot.* 
FROM x INNER JOIN annot 
ON x.id = annot.id;")

return(annoted)}

如何正确地将列表中的数据帧名称传递给函数?

我无法复制您的错误。另外,像这样使用
assign()
也不是一个好主意。如果有一组相关的变量,最好将它们保存在一个列表中,这样就可以轻松地对它们执行向量化操作。这里有一个有效的例子

annot <- data.frame(id=1:10, n=letters[1:10])
prepareAnnot <- function(x) {
    sqldf("select x.*, annot.n from x INNER JOIN annot ON x.id = annot.id")
}

myresults <- list(A=data.frame(id=1:3), B=data.frame(id=4:7))    
annotated <- lapply(myresults, prepareAnnot)
annotated

以确保它们都是正确的数据帧。

谢谢Flick先生!你的解决方案有效,我应该使用lappy函数。
Error in sqliteExecStatement(con, statement, bind.data) : 
RS-DBI driver: (error in statement: no such table: x)
annot <- data.frame(id=1:10, n=letters[1:10])
prepareAnnot <- function(x) {
    sqldf("select x.*, annot.n from x INNER JOIN annot ON x.id = annot.id")
}

myresults <- list(A=data.frame(id=1:3), B=data.frame(id=4:7))    
annotated <- lapply(myresults, prepareAnnot)
annotated
sapply(myresults, class)