R 子集函数不计算参数

R 子集函数不计算参数,r,function,subset,argument-passing,R,Function,Subset,Argument Passing,使用以下称为“数据”的数据框架,我能够直接为两个变量赋值,“状态”和“度量”,并确定子集中得分最低的学校: 创建数据帧“数据”: school<-c("NYU", "BYU", "USC", "FIT", "Oswego","UCLA","USF","Columbia") state<-c("NY","UT","CA","NY","NY","CA", "CA","NY") measure<-c("MSAT","MSAT","GPA","MSAT","MSAT","GPA","G

使用以下称为“数据”的数据框架,我能够直接为两个变量赋值,“状态”和“度量”,并确定子集中得分最低的学校:

创建数据帧“数据”:

school<-c("NYU", "BYU", "USC", "FIT", "Oswego","UCLA","USF","Columbia")
state<-c("NY","UT","CA","NY","NY","CA", "CA","NY")
measure<-c("MSAT","MSAT","GPA","MSAT","MSAT","GPA","GPA","GPA")
score<-c(590, 490, 2.9, 759, 550, 1.2, 3.1, 3.2)
data<-data.frame(school,state, measure,score)
我的问题是,当我创建一个函数来完成同样的事情时,我得到了一个错误的结果:

lowest <- function(state, measure){
    answer<-subset(data,subset=(state==state & measure==measure))
    order.answer<-order(answer$score,answer$school)
    answer1<-as.matrix(answer[order.answer,])
    answer1[1,1]
  }

lowest("NY","MSAT")

问题似乎在于变量“state”和“measure”在函数的子集行中不具有参数“NY”和“MSAT”的值。我尝试了使用“=”而不是“=”,还尝试了子集(data,subset=(state==“state”&measure==“measure”)),但找不到解决方案。

函数调用中似乎出现了一些问题,这与函数参数与数据列相同这一事实有关,因为这是有效的

lowest <- function(State, Measure){
  answer<-subset(data,subset=(state==State & measure==Measure))
  order.answer<-order(answer$score,answer$school)
  answer1<-as.matrix(answer[order.answer,])
  answer1[1,1]
}
##
> lowest("NY","MSAT")
[1] "Oswego"

但是,请注意,如果我们在全局环境中创建两个对象,
state thanking@nrussell。您提到了R使用动态作用域,但我查看了几个来源,包括,说R使用词汇或静态作用域。不管怎样,这只是语义学。你对我的范围界定问题的解释很有帮助。没问题,很乐意帮忙。你是对的,我所指的特定情况是词法作用域的一个例子,不过记录在案,
R有两种类型的作用域:词法作用域,在语言级别自动实现,和动态作用域,在选择函数中用于在交互分析期间保存键入“必须阅读”表示R)。
lowest <- function(state, measure){
    answer<-subset(data,subset=(state==state & measure==measure))
    order.answer<-order(answer$score,answer$school)
    answer1<-as.matrix(answer[order.answer,])
    answer1[1,1]
  }

lowest("NY","MSAT")
[1] "UCLA"
lowest <- function(State, Measure){
  answer<-subset(data,subset=(state==State & measure==Measure))
  order.answer<-order(answer$score,answer$school)
  answer1<-as.matrix(answer[order.answer,])
  answer1[1,1]
}
##
> lowest("NY","MSAT")
[1] "Oswego"
> subset(data,subset=(state=="NY" & measure=="MSAT"))
  school state measure score
1    NYU    NY    MSAT   590
4    FIT    NY    MSAT   759
5 Oswego    NY    MSAT   550
state <- "NY"
measure <- "MSAT" 
> subset(data,state==state & measure==measure)
    school state measure score
1      NYU    NY    MSAT 590.0
2      BYU    UT    MSAT 490.0
3      USC    CA     GPA   2.9
4      FIT    NY    MSAT 759.0
5   Oswego    NY    MSAT 550.0
6     UCLA    CA     GPA   1.2
7      USF    CA     GPA   3.1
8 Columbia    NY     GPA   3.2
State <- "NY"
Measure <- "MSAT"
> subset(data, state==State & measure==Measure)
  school state measure score
1    NYU    NY    MSAT   590
4    FIT    NY    MSAT   759
5 Oswego    NY    MSAT   550