关于具有多个测量变量的条件语句,我遇到了一些障碍。简而言之,我有两个以向量形式测量的栖息地梯度,一个基于两个栖息地梯度值的栖息地类型分类方案,我想编写一些代码,允许我将所有 5K 样本分类为一个使用两次测量的栖息地类型。如果我一次给它一个样本,我可以生成一些代码,给我一个很好的输出:
(简化版)
hab.assign<-function(HabA,HabB){
if(HabA < 5 & HabB < 5){
habitat<-c("Habitat Type 1")} else
if(HabA > 5 & HabB < 5){
habitat<-c("Habitat Type 2")} else
if(HabA < 5 & HabB > 5){
habitat<-c("Habitat Type 3")} else
if(HabA < 5 & HabB < 5){
habitat<-c("Habitat Type 4")}
habitat
}
现在,如果我编写一段代码将该函数应用于整个 5K 样本中的两个向量,可以这样说:
all.habs<-function(HabA,HabB){
n<-length(HabA)
hab.units<-vector("character",n)
hab.assign<-function(HabA,HabB){
if(HabA < 5 & HabB < 5){
habitat<-c("Habitat Type 1")} else
if(HabA > 5 & HabB < 5){
habitat<-c("Habitat Type 2")} else
if(HabA < 5 & HabB > 5){
habitat<-c("Habitat Type 3")} else
if(HabA < 5 & HabB < 5){
habitat<-c("Habitat Type 4")}
habitat
}
for(i in 1:n){
ind.hab<-hab.assign()
hab.units[i]<-ind.hab
}
hab.units
}
如果我只给它一个样本,它当然仍然会输出一个有意义的答案,但是完整的向量会给我一个错误消息:
警告消息:在 if (HabA < 5 & HabB < 5) { :条件的长度 > 1 并且只使用第一个元素
有谁知道如何克服这个特殊的障碍?