【发布时间】:2015-01-07 19:52:38
【问题描述】:
我正在使用 sqldf 包中的 read.csv.sql 尝试读取行的子集,其中子集从多个值中选择 - 这些值存储在另一个向量中。
我已经破解了一种有效的表单方法,但我想看看传递sql 语句的正确方法。
下面的代码给出了最小的例子。
library(sqldf)
# some data
write.csv(mtcars, "mtcars.csv", quote = FALSE, row.names = FALSE)
# values to select from variable 'carb'
cc <- c(1, 2)
# This only selects last value from 'cc' vector
read.csv.sql("mtcars.csv", sql = paste("select * from file where carb = ", cc ))
# So try using the 'in' operator - this works
read.csv.sql("mtcars.csv", sql = "select * from file where carb in (1,2)" )
# but this doesn't
read.csv.sql("mtcars.csv", sql = paste("select * from file where carb in ", cc ))
# Finally this works
read.csv.sql("mtcars.csv", sql = paste("select * from file where carb in ",
paste("(", paste(cc, collapse=",") ,")")))
上面的最后一行有效,但是有没有更简洁的方法来传递这个语句,谢谢。
【问题讨论】:
-
想不出更干净的方法。当我遇到这个问题时,我通常会这样做。