[英]R: Passing a list of data frames to a sqldf function
我有一些數據框的清單
myList <- list("A"=A, "B"=B)
我需要將每個數據幀傳遞給一個函數,該函數在通過sql查詢進行內部處理后將返回另一個數據幀列表。
myFunction <- function(x){
inner.processing.1 <- sqldf(sprintf("SELECT
// do something
FROM '%s'", x$A))
inner.processing.2 <- sqldf(sprintf("SELECT
// do something
FROM '%s'", x$B))
inner.list <- list("C"=inner.processing.1,"D"=inner.processing.2)
return(inner.list)
}
myFunction(myList)
x $ A,x $ B方法給出錯誤“ $運算符對於原子向量無效”。 我該如何解決?
該代碼有兩個主要問題:
在SQL語句中, from
后面必須跟一個數據框的名稱 ,但是代碼試圖傳遞一個數據框本身而不是其名稱
輸入數據幀位於sqldf
無法訪問的列表中,除非將它們放在環境中並且sqldf
語句被告知要在哪個環境中查看
以內置數據框BOD
為例:
f <- function(L) { # L is named list of 2 data frames
e <- list2env(L)
list(
C = fn$sqldf("select * from `names(L)[1]`", envir = e),
D = fn$sqldf("select * from `names(L)[2]`", envir = e)
)
}
library(sqldf)
f(list(A = BOD, B = 2 * BOD))
贈送:
$C
Time demand
1 1 8.3
2 2 10.3
3 3 19.0
4 4 16.0
5 5 15.6
6 7 19.8
$D
Time demand
1 2 16.6
2 4 20.6
3 6 38.0
4 8 32.0
5 10 31.2
6 14 39.6
注意:以上假設您僅在運行時知道數據幀的名稱。 如果您在編寫函數時就知道它們,則可以簡單地對其進行硬編碼:
f2 <- function(L) { # L is named list of 2 data frames
e <- list2env(L)
list(
C = sqldf("select * from A", envir = e),
D = sqldf("select * from B", envir = e)
)
}
library(sqldf)
f2(list(A = BOD, B = 2 * BOD))
得出與先前所示相同的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.