在R中使用sapply函数进行用户定义函数的应用

3

我的代码如下所示:

data("USArrests")

AssignLevel <- function(p,quartiles)
{
  if (p < quartiles[1])
    rlevel <-"LOW"
  else if (p < quartiles[2])
    rlevel <-"MODERATE"
  else if (p < quartiles[3])
    rlevel <-"HIGH"
  else level <-"VERY HIGH"
  return (rlevel)
}
k<-USArrests$UrbanPop
k

q<- quantile(USArrests$UrbanPop, c(.25,.5,.75))

newCol <- sapply(USArrests$UrbanPop,AssignLevel(k,q))

我试图将每个州的城市人口值更改为对应四分位数之一。当我运行AssignLevel(k,q)时有效,但在sapply中运行时无效。

1
老实说,看起来你应该只是使用“cut”。 - joran
1
aye: cut(USArrests$UrbanPop, breaks=c(min(USArrests$UrbanPop), q, max(USArrests$UrbanPop)), labels=c("LOW", "MODERATE", "HIGH", "VERY HIGH"), include.lowest=TRUE) 更加简洁。 - hrbrmstr
1个回答

1

我同意使用 cut 解决方案更好。为了好玩,下面是如何解决您当前的问题:

data("USArrests")

AssignLevel <- function(p,quartiles) {
  if (p < quartiles[[1]]){
    rlevel <- "LOW"
  } else if(p < quartiles[[2]]) {
    rlevel <- "MODERATE"
  } else if(p < quartiles[[3]]) {
    rlevel <- "HIGH"
  } else {
    rlevel <- "VERY HIGH"
  }
  return (rlevel)
}
k <- USArrests$UrbanPop

q <- quantile(k, c(.25,.5,.75))


newCol <- sapply(k,AssignLevel,q)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接