R:分配给对象的函数产生意外结果

时间:2016-02-08 17:31:37

标签: r

编辑:我自己解决了这个问题。它与函数对象分配无关,就是我将结果分配给向量“[]”而不是列表“[[]]”

这里有关于这个主题的更多阅读:The difference between [] and [[]] notations for accessing the elements of a list or dataframe

我正在尝试过滤事件数据。根据我正在看的东西,我必须以不同的方式进行过滤。我有两个用于过滤的函数(我在整个项目中使用它们,除了这个实例):

drop_columns <- function(x, ...) {
      selectors <- list(...)
      return(x[ , -which(names(x) %in% selectors)])
    }

filter_by_val <- function(x, col, ...) {
      return(x[ which(x[, col] %in% ...), ])
    }

这是选择哪个函数进行过滤然后执行它的函数。请注意,我将该函数分配给名为“filter_method”的对象:

filter_playtime_data <- function (key_list, data) {
  filter_method <- NULL
  out_list <- list()

  if(key_list$kind == "games") {
    filter_method <- function(key_list) {
      drop_columns(filter_by_val(data, "GameTitle", key_list), "X")
    }
  } else if (key_list$kind == "skills") {
    filter_method <- function(key_list) {
      filter_by_val(data, "Skill", key_list)
    }
  }
  # Separate data with keys
  out_list["ELA"] <- filter_method(key_list[["ELA"]])
  out_list["MATH"] <- filter_method(key_list[["MATH"]])
  out_list["SCI"] <- filter_method(key_list[["SCI"]])

  return (out_list)
}

我正在尝试根据“技能”过滤数据(即使用filter_by_val)并且它没有按预期工作。我正在输入一个data.frame,我期待一个data.frame出来,但我得到一个索引列表,好像该函数只返回我的函数的这部分:-which(names) (x)%选择器%)

当我运行时,这是调试浏览器 - 即。 filter_method(key_list [[“ELA”]]) - 它按预期工作,我得到数据帧。但是我输出列表中的值:out_list [[ELA]]是索引列表。知道发生了什么吗?

0 个答案:

没有答案