你好,我正在构建一个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