Преобразовать матрицу с отрицательными значениями в растр - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть матрица 'm', содержащая минимальные значения температуры. Некоторые из этих значений являются отрицательными. Мне нужно преобразовать эту матрицу в растр. Поэтому, когда я использую команду raster() из пакета raster, я получаю следующую ошибку. Пожалуйста, помогите!

Ошибка в setValues ​​(r, as.vector (t (x))): значения должны быть цифрами c, целыми числами, логическими или факторами

Данные для справки:

m<-structure(c("99.9", "99.9", "99.9", "99.9", "99.9", "99.9", "99.9", 
"99.9", "99.9", "99.9", "99.9", "99.9", "99.9", "99.9", "99.9", 
"99.9", "99.9", "99.9", "99.9", "99.9", "99.9", "99.9", "99.9", 
"99.9", "99.9", "99.9", "99.9", "99.9", "99.9", "99.9", "99.9", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "12.46", 
"12.92", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", " 8.86", 
"99.90", "99.90", "12.32", "12.64", "12.94", "13.93", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", " 7.40", " 8.60", " 8.89", " 9.76", "11.96", "12.50", 
"12.99", "13.13", "13.02", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", " 7.29", " 8.08", " 8.58", 
" 9.44", "10.60", "10.84", "11.20", "12.01", "13.49", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "-0.37", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", " 4.93", 
" 5.64", " 7.79", " 8.42", " 9.29", " 9.43", " 9.27", "12.10", 
"12.54", "13.42", "13.61", "14.77", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "19.36", "99.90", "99.90", "99.90", 
"99.90", "99.90", "-1.99", "-0.67", " 0.62", " 0.63", "99.90", 
"99.90", " 4.09", " 3.79", " 5.49", " 6.73", " 7.93", " 7.81", 
" 8.83", " 9.84", "11.15", "10.84", "12.85", "12.43", "13.68", 
"14.56", "16.48", "16.23", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "23.27", "99.90", "99.90", "-1.45", "-0.74", 
"-0.97", " 0.74", " 1.63", " 4.15", " 3.49", " 3.76", " 4.55", 
" 5.76", " 6.53", " 7.78", " 8.00", " 8.67", " 9.83", "10.25", 
"10.76", " 8.93", "11.38", "11.84", "14.36", "16.06", "16.04", 
"15.76", "17.39", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "-0.65", "-0.78", "-0.43", "-0.76", " 2.81", " 4.70", 
" 3.46", " 3.64", " 4.73", " 4.82", " 6.47", " 7.31", " 7.86", 
" 8.87", " 8.61", "10.17", "10.17", "10.40", "10.01", "12.23", 
"13.16", "14.25", "15.00", "16.14", "17.00", "17.69", "19.37", 
"99.90", "99.90", "99.90", "99.90", "99.90", "-0.83", "-1.06", 
" 0.17", " 3.11", " 3.44", " 4.90", " 4.58", " 4.94", " 4.95", 
" 6.17", " 6.63", " 7.55", " 8.27", " 8.29", " 9.93", "10.95", 
"10.71", "11.21", "12.49", "14.18", "14.42", "15.60", "15.77", 
"14.00", "16.37", "17.46", "21.33", "21.87", "99.90", "99.90", 
"99.90", "-0.86", "-2.05", "0.10", "2.20", "4.47", "5.56", "6.12", 
"6.10", "5.50", "4.93", "4.71", "6.70", "7.69", "7.45", "9.45", 
"11.47", "11.89", "12.26", "13.52", "14.23", "15.22", "16.42", 
"15.74", "16.16", "16.83", "18.17", "21.26", "22.44", "99.90", 
"99.90", "-4.57", "-2.03", "-1.31", " 0.89", " 2.17", " 4.72", 
" 5.95", " 6.75", " 6.49", " 6.31", " 5.31", " 4.80", " 5.88", 
" 6.95", " 7.45", " 9.75", "11.36", "11.42", "12.27", "13.22", 
"14.11", "16.49", "16.96", "16.60", "16.88", "19.74", "20.96", 
"20.41", "22.32", "99.90", "99.90", "99.90", "-2.68", "-0.34", 
" 1.60", " 2.97", " 4.81", " 6.64", " 6.83", " 7.61", " 7.21", 
" 6.28", " 5.28", " 5.62", " 5.81", " 7.09", " 8.52", "10.93", 
"11.58", "12.52", "13.39", "15.22", "16.23", "18.01", "18.00", 
"19.30", "21.00", "21.35", "21.75", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", " 7.51", 
" 8.18", " 8.01", " 7.95", " 7.53", " 5.68", " 5.52", " 5.58", 
" 7.39", " 9.35", "10.68", "11.17", "12.61", "14.15", "15.91", 
"16.71", "18.30", "19.04", "19.45", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", " 8.34", " 8.28", " 7.65", 
" 6.53", " 5.87", " 5.58", " 7.49", " 8.72", " 9.88", "10.53", 
"13.71", "14.45", "15.99", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", " 8.32", " 8.37", " 8.00", " 6.92", " 6.42", " 8.04", 
" 9.75", " 9.58", "11.70", "13.80", "14.76", "16.10", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", " 9.03", " 9.18", " 8.92", 
" 8.04", " 7.44", " 8.12", " 8.73", "10.35", "12.07", "12.75", 
"13.99", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
" 9.21", " 9.43", " 9.47", " 8.14", " 7.70", " 8.32", " 9.40", 
"11.38", "11.76", "13.11", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", " 9.51", " 9.30", " 9.10", 
" 8.72", " 9.12", "11.34", "12.02", "12.38", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
" 8.57", " 9.09", " 9.97", "10.50", "11.36", "11.92", "13.42", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", " 7.52", " 9.92", "10.26", "11.06", 
"12.31", "13.50", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", " 8.30", " 8.11", " 8.21", 
"10.57", "10.30", "11.91", "12.72", "13.80", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", " 8.37", " 8.98", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", " 8.54", " 9.44", "10.45", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", " 9.59", 
"10.09", " 9.99", "10.56", "10.96", " 9.80", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", " 9.05", " 9.11", " 9.35", " 9.79", " 9.72", 
" 9.72", "10.06", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "22.12", "22.12", "22.09", 
"22.07", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", " 9.59", " 9.58", 
" 9.57", " 9.80", " 9.61", " 9.86", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
" 9.62", " 9.61", " 9.37", " 9.26", " 9.61", " 9.87", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "21.73", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", " 9.63", " 9.44", " 9.86", " 9.26", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", " 9.19", 
" 9.90", " 9.30", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", " 9.37", " 9.24", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90", "99.90", "99.90", "99.90", 
"99.90", "99.90", "99.90", "99.90"), .Dim = c(31L, 31L), .Dimnames = list(
    NULL, c("V3", "V4", "V5", "V6", "V7", "V8", "V9", "V10", 
    "V11", "V12", "V13", "V14", "V15", "V16", "V17", "V18", "V19", 
    "V20", "V21", "V22", "V23", "V24", "V25", "V26", "V27", "V28", 
    "V29", "V30", "V31", "V32", "V33")))

1 Ответ

2 голосов
/ 12 февраля 2020

Я думаю, это потому, что когда вы конвертируете m из текста в цифру c, вы теряете его атрибут размеров, поэтому он становится вектором, а не матрицей. Это достаточно просто изменить:

dims   <- dim(m)
m      <- as.numeric(gsub(" ", "", m))
dim(m) <- dims

raster(m)
#> class      : RasterLayer 
#> dimensions : 31, 31, 961  (nrow, ncol, ncell)
#> resolution : 0.03225806, 0.03225806  (x, y)
#> extent     : 0, 1, 0, 1  (xmin, xmax, ymin, ymax)
#> crs        : NA 
#> source     : memory
#> names      : layer 
#> values     : -4.57, 99.9  (min, max)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...