Почему фильтр dplyr не принимает целочисленный фрейм данных?

#r #dataframe #filter #dplyr #int

#r #фрейм данных #Фильтр #dplyr #int

Вопрос:

Я запустил следующий код на data , который имеет 12 integer переменную:

 calculate_winnings <- function(data, time_durations) {
    require("data.table")

    calculate_winnings_loop_body <- function(i) {
        require("dplyr")

        beg <- time_durations[i]
        end <- time_durations[i   1]

        these_games <- filter(data, gameDuration >= beg amp; gameDuration < end)

        team1_wins <- filter(these_games, winner == 1) %>% sum
        team2_wins <- filter(these_games, winner == 2) %>% sum

        data.frame(team1 = team1_wins, team2 = team2_wins)
    }

    i <- 1
    Samples <- length(time_durations) - 1

    l <- lapply(1 : Samples, calculate_winnings_loop_body)
    rbindlist(l)
}

double_max <- .Machine["double.xmax"]
winnings <- calculate_winnings(data, c(180, 1200, 1500, 1800, 2100, double_max))
  

И ошибки:

 Error in FUN(X[[i]], ...) : 
  only defined on a data frame with all 
numeric variables
In addition: Warning message:
NAs introduced by coercion to integer range 
  

Я пытался tracback() :

 15: stop("only defined on a data frame w
ith all numeric variables")
14: FUN(X[[i]], ...)
13: lapply(args, function(x) {
        x <- as.matrix(x)
        if (!is.numeric(x) amp;amp; !is.comple
x(x)) 
            stop("only defined on a data
 frame with all numeric variables")
        x
    })
12: Summary.data.frame(list(gameDuration = integer(0), winner = integer(0), 
                            firstBlood = integer(0), firstTower = integer(0), 
                            firstBaron = integer(0), firstDragon = integer(0), 
                            t1_towerKills = integer(0), t1_baronKills = integer(0), 
                            t1_dragonKills = integer(0), t2_towerKills = integer(0), 
                            t2_baronKills = integer(0), t2_dragonKills = integer(0)), 
                            na.rm = FALSE)
11: function_list[[k]](value)
10: withVisible(function_list[[k]](value))
9: freduce(value, `_function_list`)
8: `_fseq`(`_lhs`)
7: eval(quote(`_fseq`(`_lhs`)), env, env)
6: eval(quote(`_fseq`(`_lhs`)), env, env)
5: withVisible(eval(quote(`_fseq`(`_lhs`)), env, env))
4: filter(these_games, winner == 1) %>% sum at debug.R.tmp.R#18
3: FUN(X[[i]], ...)
2: lapply(1:Samples, calculate_winnings_loop_body) at debug.R.tmp.R#34
1: calculate_winnings(data, c(180, 1200, 1500, 1800, 2100, double_max))
  

Но я не могу понять, почему это происходит.

Редактировать:

Данные загружаются из kaggle и затем обрабатываются:

 comb <- function(vec1, vec2, sep = "") {
    ret <- c()

    for (str1 in vec1)
        for (str2 in vec2)
            ret <- c(ret, paste(str1, str2, sep = sep))

    ret
}

data <- read.csv("data/1_games.csv")
data <- data[, c("gameDuration", "winner",
                  comb(c("first"), c("Blood", "Tower", "Baron", "Dragon")),
                  comb(c("t1_", "t2_"), c("towerKills", "baronKills", "dragonKills"))
                 )]
data <- data[data$gameDuration > 240, ]
data <- data[data$firstTower != 0, ]
  

Комментарии:

1. Пожалуйста, поделитесь образцами данных.

2. @Sonny Источник данных и R скрипт, используемый для их обработки, являются общими.

Ответ №1:

Ваша double_max переменная представляет собой список, и это создает проблемы ниже по потоку. Если вы этого хотите, преобразуйте в числовой, и остальной ваш код должен работать

 double_max <- as.numeric(.Machine["double.xmax"])
  

Пожалуйста, проверьте

Предложение: Пожалуйста, переместитесь require за пределы функции