如何在r中的字符串中获取动态变量?

时间:2015-11-18 09:10:09

标签: r

如何让函数的变量名在字符串中动态动作?

下面是我想要实现的内容的摘录:一个根据varName生成列表的函数。但我无法让varName在字符串sqldf(...)内动态动作。我认为这个问题不是特定于包sqldf

createExcelSheetData<-function(varName){
  sqldf("
         SELECT Name 
         FROM dataTable
         WHERE Choice=varName
       ")
}
table1<-createExcelSheetData(1)
table2<-createExcelSheetData(2)
table3<-createExcelSheetData(3)

上面给出的内容是使用文字varName修正的选项。

更新:在文本中包含变量,而不仅仅是在结尾。

createExcelSheetData<-function(varName){
  sqldf("
         SELECT Name 
         FROM dataTable
         WHERE Choice=varName
         ORDER BY Name
       ")
}
table1<-createExcelSheetData(1)
table2<-createExcelSheetData(2)
table3<-createExcelSheetData(3)

1 个答案:

答案 0 :(得分:1)

fn$sqldf home page的示例6中进行了讨论。以下是使用R附带的iris数据框的自包含最小可重现示例:(将来请确保所有代码都是最小且可重现的,特别是包括所有输入)。

library(sqldf)

# retrieve records for specified Species and Petal.Length above minPetalLength
f <- function(Species, minPetalLength) {
           fn$sqldf("SELECT * 
                     FROM iris 
                     WHERE Species = '$Species' and [Petal.Length] > $minPetalLength")
}

f("virginica", 6)

,并提供:

  Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
1          7.6         3.0          6.6         2.1 virginica
2          7.3         2.9          6.3         1.8 virginica
3          7.2         3.6          6.1         2.5 virginica
4          7.7         3.8          6.7         2.2 virginica
5          7.7         2.6          6.9         2.3 virginica
6          7.7         2.8          6.7         2.0 virginica
7          7.4         2.8          6.1         1.9 virginica
8          7.9         3.8          6.4         2.0 virginica
9          7.7         3.0          6.1         2.3 virginica