R中的函数创建:使用因子级别作为参数?

时间:2014-09-26 14:30:53

标签: r function

我想在R中创建一个函数,它将根据分类变量(一个因子)的级别创建数据框的子集。最终,我的函数将操纵这个子集,但我无法使第一部分工作....

这是我的代码以及使用该功能时得到的结果:

> Petite13.b [1:5, ]
    Numero Espece      Arbre Nb
1        1    BOP Brout_mort  1
61       1    BOP     Mutile  2
130      1    SAB     Mutile  1
213      1    BOP     Vivant  1
439      1    SAB     Vivant  2

> Creation.PLL <- function(Esp, Arb, Source){
+   x <-Source[Source$Espece== "Esp" & Source$Arbre== "Arb", ]
+   return(x)
+ }
> 
> Creation.PLL(SAB, Vivant, Petite13.b)
[1] Numero Espece Arbre  Nb    
<0 lignes> (ou 'row.names' de longueur nulle)

我的数据框(此处名为Source将始终包含一个名为Source$Espece的变量,另一个名为Source$Arbre的变量。

感谢。

2 个答案:

答案 0 :(得分:1)

您需要在函数中省略"个。但是你需要在函数调用中添加"

Creation.PLL <- function(Esp, Arb, Source){
    Source[Source$Espece == Esp & Source$Arbre == Arb, ]
}

Creation.PLL("SAB", "Vivant", Petite13.b)

答案 1 :(得分:0)

如果您不想引用参数,也可以将substitutedeparse一起使用。

foo <- function(x, data){
    x <- deparse(substitute(x))
    data[with(data, Species == x),]
}
head(foo(setosa, iris))
#   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1          5.1         3.5          1.4         0.2  setosa
# 2          4.9         3.0          1.4         0.2  setosa
# 3          4.7         3.2          1.3         0.2  setosa
# 4          4.6         3.1          1.5         0.2  setosa
# 5          5.0         3.6          1.4         0.2  setosa
# 6          5.4         3.9          1.7         0.4  setosa