在函数中传递参数时发出

时间:2019-09-09 12:06:28

标签: r

我正在尝试使用以下代码创建此功能:

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

2 个答案:

答案 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