2016-11-21 2 views
0

Итак, у меня есть набор данных, и я пытаюсь найти все локальные максимумы на полученной кривой. Я читал в CSV-файле, который имеет x-значения в первом столбце и y-значения во втором, первый шаг, простой.Принуждение вектора к цифровому режиму в R

Чтобы найти максимальные значения, я попытался использовать функцию findpeaks() из базы данных pracma. Тем не менее, каждый раз, когда я попытался запустить его, я получил ту же ошибку:

Error: is.vector(x, mode = "numeric") is not TRUE 

Итак, я первый раз попробовал преобразовывая это вектор. По-прежнему была та же проблема, однако is.vector(x, mode = "any") теперь вернулась. Я нашел некоторые другие потоки справки (которые я больше не могу найти, поэтому я не могу поделиться ими, извините!) И решил попробовать использовать lapply, чтобы принудить каждую запись в новом векторе, используя as.numeric. Не работает. Посмотрел на ?as.numeric, и он упомянул, что as.double может быть лучше подходит. Не работает. Теперь я в недоумении и не уверен, что делать - текущий рабочий код показан ниже.

plot <- read_csv("AFGP60 UV-05-04-16.csv", 
       col_names = FALSE, na = "null", skip = 2,n_max = numrow) 
diffplot <- c(plot[1:601,2]) 
diffplot <- lapply(diffplot,as.double) 
findpeaks(diffplot)` 
+2

Из вашего описания невозможно узнать, как выглядят ваши данные. Используйте инструменты, такие как 'str()' и 'dput()', чтобы показывать свои данные. –

+0

Возможно, вы прочитали его как строку, и это, вероятно, было указано в CSV. Исправление состоит в том, чтобы использовать 'read_csv (..., col_types) 'Пожалуйста, дамп нам данные, как @ RomanLuštrik спросил. Кроме того, не говорите нам * «использование' as.numeric' не работает * *; покажите нам точное предупреждение об ошибке (а также данные). – smci

+0

Я не хотел делиться данными из-за его размера и того факта, что это часть моих исследований. Был надеется, что я дал достаточно информации в своем описании самих данных. Тем не менее, я не знал о функциях str() и dput() - dput(), заставив меня понять, что вектор был сохранен в списке, поэтому я просто добавил diffplot <- unlist (diffplot), и это сделало обмануть! Что касается 'as.numeric', который не работает, предупреждение об ошибке было не так много. As.numeric сделал свое дело, а затем я получил ту же ошибку, что и 'is.vector', возвращающий false. – keefles

ответ

0

Пробег: diffplot <- as.numeric(as.vector(plot[1:600, 2])).

Проблема заключалась в том, что данные были прочитаны как символ или как фактор. Вышеприведенный код должен изменить это. Тем не менее, есть несколько проблем с вашим кодом. Сначала plot является базовой функцией, используемой для построения графика. Именование переменной с таким именем - плохая практика.

Во-вторых, переменная diffplot представляет собой вектор (первые 600 строк из второго столбца), поэтому нет необходимости изменять каждый элемент отдельно с помощью функции lapply.

+0

К сожалению, не получилось - я понял, почему. Оказывается, diffplot хранится в списке, поэтому is.vector возвращает false, потому что каждый раз, когда он проверял, он видел список, и поэтому принуждение не было проблемой. Большое спасибо за то, что вы предложили свое время, чтобы помочь, - и я обязательно буду помнить о том, что будет в будущем! – keefles