编辑:我自己解决了这个问题。它与函数对象分配无关,就是我将结果分配给向量“[]”而不是列表“[[]]”
这里有关于这个主题的更多阅读: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]]是索引列表。知道发生了什么吗?