Как разблокировать which.min на tibbles - PullRequest
0 голосов
/ 12 мая 2018

/ R-Newb. Мой вызов which.min отлично работает на столбце моего dataframe, но при загрузке dplyr which.min больше не работает. Это потому, что дф теперь тибл? Любое решение?

> which.min(Analytic_traces_raw[,1]) #********************WORKS FINE HERE**
[1] 1
> library(dplyr)

Attaching package: ‘dplyr’
The following objects are masked from ‘package:stats’:
    filter, lag
The following objects are masked from ‘package:base’:
    intersect, setdiff, setequal, union

> which.min(Analytic_traces_raw[,1]) #*********************NOW IT'S BROKEN**
Error in which.min(Analytic_traces_raw[, 1]) : 
  (list) object cannot be coerced to type 'double'

> head(Analytic_traces_raw[,1]) #**TYPE IS DBL, BUT TIBBLE TROUBLE**?
# A tibble: 6 x 1
  `t_Pur23Mar18_TP7-24`
                  <dbl>
1              0.000417
2              0.00375 
3              0.00708 
4              0.0104  
5              0.0138  
6              0.0171  

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

Это не which.min, которое «сломало», это то, что тиблы «сломали» поведение по умолчанию в R. Обычно для фреймов данных Analytic_traces_raw[,1] отбрасывает измерения и становится вектором.tibbles изменили это поведение, поэтому R-функции, которые ожидают «нормального» поведения, сломаются.Попробуйте Analytic_traces_raw[[1]]:

library(dplyr)
which.min(mtcars[,1])
[1] 15
> mtcars_tbl <- as_tibble(mtcars)
> which.min(mtcars_tbl[,1])
Error in which.min(mtcars_tbl[, 1]) : 
  (list) object cannot be coerced to type 'double'
> which.min(mtcars_tbl[[1]])
[1] 15
0 голосов
/ 12 мая 2018

Подобные проблемы можно исправить, указав имя пакета перед командой, например,

raster::which.min(Analytic_traces_raw[,1])

(или замените имя пакета, если вы на самом деле используете which.min, отличное от тех, которые указаны в dplyr или raster). Вот пример (хотя не тот, который дает разные результаты):

> data(iris)
> apply(iris, 2, raster::which.max)
$Sepal.Length
[1] 132

$Sepal.Width
[1] 16

$Petal.Length
[1] 119

$Petal.Width
[1] 101

$Species
integer(0)

> apply(iris, 2, base::which.max)
$Sepal.Length
[1] 132

$Sepal.Width
[1] 16

$Petal.Length
[1] 119

$Petal.Width
[1] 101

$Species
integer(0)
...