2015-08-19 3 views
1

У меня есть список из 69 zoo объектов, я использовал na.approx, чтобы заполнить несколько пробелов, но так как мои временные ряды имеют дело с подсчетами, мне нужно, чтобы вмененные значения были целыми числами.zoo - Round coredata to integer

Этот код

list_int <- lapply(list_dec, round(coredata(list_dec), digits=0)) 

дает мне следующее сообщение об ошибке

Error in round(coredata(list_dec), digits=0) : 
    non-numeric argument to mathematical function 

Я думал, что это была проблема с применением функции к списку вместо вектора, а функция

coredata(list_dec) 

правильно показывает все 69 временных рядов (без необходимости lapply).

Почему же round не применяется к coredata?

EDITED

Как предложено здесь минимальный набор данных

A1 <- runif(20, min=-5, max=13) 
A2 <- runif(20, min=-1, max=5) 
A3 <- runif(20, min=-3, max=10) 
A4 <- runif(20, min=0, max=2) 
ls <- list(A1, A2, A3, A4) 
list_dec <- lapply(ls, as.zoo) 
+0

Вы уверены, что вы имеете дело с числами, а не строками, которые выглядят как цифры? – Cleb

+0

Да, перед использованием 'na.approx' они были целыми числами, но функция принудила их к числовым – Quechua

+0

Не могли бы вы разместить минимальный пример вашего набора данных? – Cleb

ответ

0

Как обсуждалось в комментариях, вы можете сделать то, что вы хотите с помощью следующего:

> library(zoo) 
> A1 <- runif(20, min=-5, max=13) 
> A2 <- runif(20, min=-1, max=5) 
> A3 <- runif(20, min=-3, max=10) 
> A4 <- runif(20, min=0, max=2) 
> ls <- list(A1, A2, A3, A4) 
> list_dec <- lapply(ls, as.zoo) 

Теперь list_dec выглядит следующим образом:

> list_dec 
[[1]] 
      1   2   3   4   5   6   7   8   9   10   11   12   13 
9.20889929 8.03050882 1.52621137 9.91528049 12.71637959 11.93573340 3.34967427 9.75224030 7.90654714 0.08199464 -2.84403691 11.57990103 4.74868873 
     14   15   16   17   18   19   20 
2.94023319 10.71812525 -2.05394366 -1.07669056 7.17503613 4.84871327 4.58929978 

[[2]] 
     1   2   3   4   5   6   7   8   9   10   11   12   13   14   15 
1.0756646 0.5615212 0.5697795 0.9629726 2.5962021 3.1932062 0.6894849 1.9844943 1.3351256 4.0043998 0.4756172 0.4573920 0.6009208 4.4963877 4.4149804 
     16   17   18   19   20 
3.7762369 2.9670795 -0.8241576 2.1796402 2.5504061 

[[3]] 
     1   2   3   4   5   6   7   8   9   10   11   12   13   14   15 
1.5765136 1.7310402 0.7273943 4.0838831 -0.9946958 -2.0222258 7.5756159 3.9105252 3.9006369 -0.9939739 4.7603811 8.5079521 3.3653795 0.8546201 3.8143874 
     16   17   18   19   20 
5.0847501 -2.6324485 2.0860695 5.7202315 9.5304238 

[[4]] 
     1   2   3   4   5   6   7   8   9   10   11   12   13   14   15 
1.36751418 1.44009472 1.41155170 1.55018689 1.31378442 1.09746739 0.09224919 0.66425731 0.61047787 1.63552109 1.56096710 1.59775494 1.69658733 1.08939868 1.96183397 
     16   17   18   19   20 
1.20476936 0.94640977 0.73820689 0.65899943 1.54647028 

Теперь вы можете напрямую позвонить lapply так:

lapply(list_dec,round) 

, который дает желаемый результат:

[[1]] 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 
9 8 2 10 13 12 3 10 8 0 -3 12 5 3 11 -2 -1 7 5 5 

[[2]] 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 
1 1 1 1 3 3 1 2 1 4 0 0 1 4 4 4 3 -1 2 3 

[[3]] 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 
2 2 1 4 -1 -2 8 4 4 -1 5 9 3 1 4 5 -3 2 6 10 

[[4]] 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 
1 1 1 2 1 1 0 1 1 2 2 2 2 1 2 1 1 1 1 2