R:将函数参数传递给 sqldf
R: Passing function argument to sqldf
我见过类似的问题 here and example 5 here 但我无法让我的示例起作用。
我在 R 方面不是很有经验,所以也许这很愚蠢。
我只想有一个函数,参数是 sqldf
使用的列名
我的最佳猜测:
function1 <- function(x) {
ranking_test <<- sqldf ('select $x from lat_lon_combo t1')
}
function1(t1.lat_lon)
结果
"Error in mget(words, envir, "any", NA, inherits = TRUE) : object
't1.lat_lon' not found"
虽然t1.lat_lon应该存在。
有什么想法吗?
常见错误。 列名称 t1.lat_lon
可能存在,但在您对 function1
的调用中,您引用了一个名为 变量 12=],不存在。
您有几个选项,为简单起见,我推荐第一个(字符串):
将其作为字符串传递,并使用paste
或sprintf
形成查询字符串。如:
library(sqldf)
func1 <- function(x) {
sqldf(sprintf("select %s from mtcars where cyl > 7", x))
}
func1("disp")
如果你真的必须引用它而不用引号,你可以做这个诡计,但在这种情况下这是不必要的复杂性(为了两个引号符号):
func2 <- function(x) {
sqldf(sprintf("select %s from mtcars where cyl > 7",
deparse(substitute(x))))
}
func2(disp)
在执行类似 plot(disp ~ mpg, data = mtcars)
的操作时会使用(并且很有用)这种类型的取消引用(尽管这与公式略有不同)。在那些情况下,它以一些代码复杂性和间接性为代价增加了有用性。如果你不需要这个(并且,根据你的例子,它看起来不像你需要的),那么为了简单起见,我会避免这个。
顺便说一句:在这两种情况下,我 return 来自 sqldf
的值 return,我选择(并且我强烈要求)反对 副作用,就像你在你的函数中所做的那样。 Side effects 可能是理想的,但如果可以避免,我们认为可以提供更清晰和更可预测的功能。
我见过类似的问题 here and example 5 here 但我无法让我的示例起作用。 我在 R 方面不是很有经验,所以也许这很愚蠢。 我只想有一个函数,参数是 sqldf
使用的列名我的最佳猜测:
function1 <- function(x) {
ranking_test <<- sqldf ('select $x from lat_lon_combo t1')
}
function1(t1.lat_lon)
结果
"Error in mget(words, envir, "any", NA, inherits = TRUE) : object 't1.lat_lon' not found"
虽然t1.lat_lon应该存在。 有什么想法吗?
常见错误。 列名称 t1.lat_lon
可能存在,但在您对 function1
的调用中,您引用了一个名为 变量 12=],不存在。
您有几个选项,为简单起见,我推荐第一个(字符串):
将其作为字符串传递,并使用
paste
或sprintf
形成查询字符串。如:library(sqldf) func1 <- function(x) { sqldf(sprintf("select %s from mtcars where cyl > 7", x)) } func1("disp")
如果你真的必须引用它而不用引号,你可以做这个诡计,但在这种情况下这是不必要的复杂性(为了两个引号符号):
func2 <- function(x) { sqldf(sprintf("select %s from mtcars where cyl > 7", deparse(substitute(x)))) } func2(disp)
在执行类似
plot(disp ~ mpg, data = mtcars)
的操作时会使用(并且很有用)这种类型的取消引用(尽管这与公式略有不同)。在那些情况下,它以一些代码复杂性和间接性为代价增加了有用性。如果你不需要这个(并且,根据你的例子,它看起来不像你需要的),那么为了简单起见,我会避免这个。
顺便说一句:在这两种情况下,我 return 来自 sqldf
的值 return,我选择(并且我强烈要求)反对 副作用,就像你在你的函数中所做的那样。 Side effects 可能是理想的,但如果可以避免,我们认为可以提供更清晰和更可预测的功能。