我正在尝试使用以下代码创建此功能:
sss <- function(dsn, vr){
tt <- fn$sqldf("select vr, count(vr) as cnt from dsn group by 1 order by cnt")
return(tt)
}
sss(ln0105,c("loantype"))
调用函数时,出现以下错误:
错误:没有这样的列:vr
答案 0 :(得分:0)
因为您是新手,所以让我详细介绍一下之前的建议:
vr <- "loantype"
query <- paste0("select ", vr, ", count(", vr,") as cnt from dsn group by 1 order by cnt")
cat(query)
或
vr <- "loantype"
query <- glue::glue("select {vr}, count({vr}) as cnt from dsn group by 1 order by cnt")
cat(query)
答案 1 :(得分:0)
假设vr
是一个字符串,用于标识要使用的列,则您的代码正确,只是必须使用$vr
来使vr
替换为其值。仅使用简单的vr
就会认为您正在寻找一字面名为vr
的列。
请注意,您可以添加sqldf
参数verbose=TRUE
,在这种情况下,它将显示完成任何替换后实际传递给SQLite的SQL语句。
有关更多示例,请参见示例5。在sqldf github home page上插入变量。
sss <- function(dsn, vr) {
fn$sqldf("select $vr, count($vr) as cnt from dsn group by 1 order by cnt")
}
以下是在进行上述校正后使用内置mtcars
数据帧的示例。
sss(mtcars, "cyl")
给予:
cyl cnt
1 6 7
2 4 11
3 8 14