想了解一下这个R函数的区别

  • 本文关键字:函数 区别 一下 了解 r
  • 更新时间 :
  • 英文 :


你好,我正在构建一个R函数,并想了解为什么一个工作,而另一个不。

这个不行

isola_por_fator_em_col <- function(data,col,fator)
{
y <- data[which(data$col==fator),]

x <- select_if(y,is.numeric)

summary(x)

}
isola_por_fator_em_col(data=desempenho_aluno_escola,col=priv,fator="privada")

Warning message:
Unknown or uninitialised column: `col`.

当我输入this

时它也不起作用
isola_por_fator_em_col(data=desempenho_aluno_escola,col="priv",fator="privada")

这个有效

isola_por_fator_em_col <- function(data,col,fator)
{
y <- data[which(data[col]==fator),]
x <- select_if(y,is.numeric)

summary(x)
}
isola_por_fator_em_col(data=desempenho_aluno_escola,col="priv",fator="privada")
desempenho         horas            texp     
Min.   : 11.40   Min.   : 4.00   Min.   : 9.0  
1st Qu.: 51.42   1st Qu.:16.00   1st Qu.: 9.0  
Median : 67.45   Median :21.00   Median :10.0  
Mean   : 66.55   Mean   :20.06   Mean   :13.3  
3rd Qu.: 82.47   3rd Qu.:25.00   3rd Qu.:19.0  
Max.   :108.00   Max.   :31.00   Max.   :20.0 

基本上$和[]在r中的区别是什么?当我调用$ data$priv OUTSIDE函数时,它返回的列没有问题。

我认为[]返回列,而$返回值,但我不明白为什么比较函数中的值不起作用。

如果我调用

desempenho_aluno_escola[which(desempenho_aluno_escola$priv=="privada"),]

在函数外正常工作

$操作符使用非标准求值来捕获在$之后键入的名称,因此data$col永远不会取代data$priv。也就是说,在函数内部,data$col总是被解释为data[['col']]而不是data[['priv']],这就是导致错误的原因。如果想传递未加引号的列名,有多种方法可以解决这个问题。例如:

isola_por_fator_em_col <- function(data, col, fator)
{
col <- deparse(substitute(col))
summary(dplyr::select_if(data[data[[col]] == fator,], is.numeric))
}

等于:

isola_por_fator_em_col(iris, Species, 'setosa')
#> Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
#>Min.   :4.300   Min.   :2.300   Min.   :1.000   Min.   :0.100  
#>1st Qu.:4.800   1st Qu.:3.200   1st Qu.:1.400   1st Qu.:0.200  
#>Median :5.000   Median :3.400   Median :1.500   Median :0.200  
#>Mean   :5.006   Mean   :3.428   Mean   :1.462   Mean   :0.246  
#>3rd Qu.:5.200   3rd Qu.:3.675   3rd Qu.:1.575   3rd Qu.:0.300  
#>Max.   :5.800   Max.   :4.400   Max.   :1.900   Max.   :0.600 

最新更新