0

我做了一个新功能:

  newFunction <- function (varX) {

  lst_a <- c("aa", "bb", "cc")
  lst_b <- c("dd", "ee", "ff")
  lst_c <- c("gg", "hh", "ii")

  ifelse(varX %in% lst_a , x.out <- "List A" , x.out <- "Other List" )
  ifelse(varX %in% lst_b , x.out <- "List B" , x.out )
  ifelse(varX %in%  lst_c , x.out <- "List C" , x.out)

  return(x.out)

 }

当我测试该功能时,它运行良好。但是当我将它应用于数据框时,它不起作用:

     df <- as.data.frame(c("aa","cc","kk", "nn"))
    df$new <- newFunction((df[,1]))

我希望得到“列表 A”、“列表 A”、“其他列表”、“其他列表” - 但我没有这样的运气,剩下的是“其他列表”、“其他列表”、“其他列表” , “其他列表”

4

2 回答 2

1

像这样做:

newFunction <- function (varX) {
   lst_a <- c("aa", "bb", "cc")
   lst_b <- c("dd", "ee", "ff")
   lst_c <- c("gg", "hh", "ii")

   x.out = ifelse(varX %in% lst_a , "List A" , 
             ifelse(varX %in% lst_b , "List B",
               ifelse(varX %in%  lst_c , "List C" , "Other List")))    
   return(x.out)    
 }

现在它被矢量化了,你可以做df$new <- newFunction(df[,1]),而且效率更高。

我强烈建议阅读此 R-FAQ以了解ifelseif(){}else{}.

于 2018-11-28T15:10:40.937 回答
1

你可以试试

sapply (df[,1], newFunction)

或者

map(df[,1], newFunction)
于 2018-11-28T14:58:43.623 回答