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