#r #tidyverse #posixct #tibble #chron
#r #tidyverse #posixct #tibble #хронология
Вопрос:
не уверен, что это проблема из-за Tidyverse или моего кода, но я получаю это сообщение об ошибке при попытке запустить байесовскую модель с моими данными. Данные, о которых идет речь, сначала были закодированы из excel time с использованием chron, а затем в POSIXct solar time, что необходимо для запуска модели. По какой-то причине программа хочет прочитать данные как вектор и не будет работать иначе (см. Ошибка в самом конце кода). Я работаю в Windows с R-версией 4.0.3, tidyverse версии 1.3.0 и tibble версии 3.0.4. Любая помощь будет высоко оценена!
#Original Data Set to help with calcs of solar time
data.frame(
stringsAsFactors = FALSE,
ï..Date = c("6/28/2018","6/28/2018",
"6/28/2018","6/28/2018","6/28/2018"),
Time = c("12:00:00 AM","12:05:00 AM",
"12:10:00 AM","12:15:00 AM","12:20:00 AM"),
UStc = c(43279,43279.00347,43279.00694,
43279.01042,43279.01389),
USt = c(9.13, 9.1, 9.07, 9.03, 9),
Light = c(55.37360911,55.93355151,
53.89058287,56.48904704,58.9929764),
Depth = c(0.37036501,0.370455948,
0.370455948,0.370000078,0.370000078)
)
suppressPackageStartupMessages({
library(tidyverse)
library(streamMetabolizer)
library(ggpubr)
library(lubridate)
library(rstan)
library(StanHeaders)
library(chron)
library(Rcpp)
library(RcppArmadillo)
library(reprex)
library(datapasta)
})
# SET DIRECTORY AND ADJUST DATE/TIME; ADDED UPDATED SOLAR TIME EDITS
kup_in <- read.csv("reprex_data.csv") #download Input file
#Converts excel date/times to R date/times
options(chron.origin = c(month=1, day=1, year=1900))
TC <- chron((kup_in$UStc-2), format = c(dates="Day/Month/Year", times = "h:m:s"))
#Chron datetimes, change format
chron.time <- chron::chron(TC)
time.format <- "%Y-%m-%d %H:%M:%S"
text.time <- format(chron.time, time.format) #as.POSIXct works poorly with chron
posix.time.localtz <- as.POSIXct(text.time, format=time.format, tz='America/Anchorage')
#CREATE RELEVANT METABOLIZER DATA COMPONENTS
kup_in$SolarTime <- streamMetabolizer::calc_solar_time(posix.time.localtz, longitude=-149.39)
new.solar.time <- kup_in$SolarTime
#GENERATE BAYESIAN INPUT DATA FILE
dat_bayes <- NULL
dat_bayes <- data.frame(new.solar.time,DO.obs,DO.sat,depth,tempC,light)
colnames(dat_bayes)<- c("solar.time","DO.obs","DO.sat","depth","temp.water","light")
#Here's some data from dat_bayes that's plugged into the model, in which I figure solar.time is causing the issue
data.frame(solar.time = c("2018-06-27 14:04:04",
"2018-06-27 14:09:04","2018-06-27 14:14:04","2018-06-27 14:19:04","2018-06-27 14:24:04"),
DO.obs = c(10.60079025, 10.61051408, 10.61051408, 10.62138836, 10.6313428),
DO.sat = c(11.5237926676887,11.5320798498539,
11.5403775128666,11.5514573967773,11.5597795819433),
depth = c(0.37036501, 0.370455948, 0.370455948, 0.370000078, 0.370000078),
temp.water = c(9.13, 9.1, 9.07, 9.03, 9),
light = c(55.37360911, 55.93355151, 53.89058287, 56.48904704, 58.9929764),
discharge = c(4.859476627,4.865344253,4.865344253,
4.835973446,4.835973446)
)
# Set the model type.
bayes_name <- mm_name(type='bayes', pool_K600='none',
err_obs_iid=TRUE, err_proc_acor=FALSE, err_proc_iid=TRUE,
ode_method = 'trapezoid', deficit_src='DO_mod', engine='stan')
#### Set the model specs.
bayes_specs_2 <- revise(specs(bayes_name),
burnin_steps=1000, saved_steps=500,
day_start=3, day_end=27,
GPP_daily_mu = 2, GPP_daily_lower = 0,GPP_daily_sigma =2,
ER_daily_mu = -4, ER_daily_upper = 0, ER_daily_sigma = 3,
K600_daily_meanlog = log(12),
K600_daily_sdlog = 0.01,
chains=1)
#run the model with the specs
bayes_fit_kup_2 <- metab(bayes_specs_2, data=dat_bayes)
#> Error: All columns in a tibble must be vectors.
#> x Column `solar.time` is NULL.**
#> Timing stopped at: 1.41 0.01 1.42
Комментарии:
1. Это … много кода, которым вы поделились. Есть ли шанс, что вы могли бы сделать этот пример более минимальным ? Если ошибка возникает в последней строке, можете ли вы воспроизвести проблему на небольшом подмножестве данных, которыми вы могли бы поделиться напрямую, без какой-либо очистки / преобразования данных, чтобы добраться туда? Например,
dput(dat_bayes[1:10, ])
и сохранитьbayes_specs_2
, который, кажется, не зависит ни от чего другого.2. @GregorThomas Извиняюсь, я сократил его настолько, насколько это было возможно, надеюсь, это улучшение! Я оставил код, изображающий мой расчет солнечного времени, так как подозреваю, что это часть моей проблемы. Дайте мне знать ваши мысли!
3. Спасибо — это намного лучше!