Функция R chron times () не будет работать - PullRequest
3 голосов
/ 31 декабря 2011

Я пытаюсь перевести время в секунды с полуночи. Мне трудно заставить работать функцию times () из пакета chron. Вот как я это использую:

> library(chron)
> 24 * 24 * 60 * (times(50))
Error in 24 * 24 * 60 * (times(50)) : 
  non-numeric argument to binary operator
> 
>  
> library(chron)
> 24 * 24 * 60  times(5000)
Error: unexpected symbol in "24 * 24 * 60  times"

Есть предложения?

UPDATE:

> sessionInfo()
R version 2.14.0 (2011-10-31)
Platform: i386-pc-mingw32/i386 (32-bit)

locale:
[1] LC_COLLATE=English_United States.1252 
[2] LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] RODBC_1.3-3        nnet_7.3-1         doSNOW_1.0.3       foreach_1.3.0     
[5] codetools_0.2-8    iterators_1.0.3    snow_0.3-7         randomForest_4.6-2
[9] chron_2.3-42      

loaded via a namespace (and not attached):
[1] tools_2.14.0

ОБНОВЛЕНИЕ 2:

> find("times")
[1] "package:foreach" "package:chron"  
> times
function (n) 
{
    if (!is.numeric(n) || length(n) != 1) 
        stop("n must be a numeric value")
    foreach(icount(n), .combine = "c")
}
<environment: namespace:foreach>

ОБНОВЛЕНИЕ 3:

> sessionInfo()
R version 2.14.0 (2011-10-31)
Platform: i386-pc-mingw32/i386 (32-bit)

locale:
[1] LC_COLLATE=English_United States.1252 
[2] LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] chron_2.3-42
> find("times")
[1] "package:chron"
> 24 * 24 * 60 * (times * (50))
Error in times * (50) : non-numeric argument to binary operator

1 Ответ

6 голосов
/ 31 декабря 2011

Проблема в том, что package:foreach также содержит функцию с именем times. И поскольку он появляется перед package:chron в вашем пути поиска, он «маскирует» функцию times, которая вам действительно нужна.

Другими словами, когда R выполняет свой динамический поиск символа times, он находит совпадение (в данном случае неправильное), прежде чем он доберется до того, которое связано с функцией, которую вы собираетесь найти.

Вы можете увидеть это, начав новый сеанс R, а затем набрав:

> library(chron)
> library(foreach)
Loading required package: iterators
Loading required package: codetools
foreach: simple, scalable parallel programming from Revolution Analytics
Use Revolution R for scalability, fault tolerance and more.
http://www.revolutionanalytics.com

Attaching package: ‘foreach’

The following object(s) are masked from ‘package:chron’:

    times

Если вам нужно нужны оба пакета, вы можете убедиться, что получили правильную версию times() одним из следующих способов: изменив порядок, в котором пакеты присоединены (хорошо, но не очень); или (лучше) явно указав, какую функцию вы хотите, набрав chron::times, например:

24 * 24 * 60 * (chron::times(50))
...