Error with import.meas function
Quote from jlonthair on November 5, 2021, 3:17 pmI have been using the fishresp package for some time now, and I have now received an error code during the import.meas function.
For background, this data was collected in Auto Resp. And I have already converted my background files (both before and after) along with converting the RMR measurement file from percent_a.s. to mg_per_l using the convert.respirometry function. This worked seamlessly and provided a new a file, which I have then used in following function.
I then imported the info about the chamber volume and animal mass using the input.info function.
The background files were imported via the import.test function, and this provided no errors.
But I then try to import the RMR file via import.meas and receive this error code.
Error in `$<-.data.frame`(`*tmp*`, "Time", value = c(1L, 2L, 3L, 4L, 5L, : replacement has 23040 rows, data has 22974
Any help would be appreciated. I have uploaded my RMR raw file and the converted file.
I have been using the fishresp package for some time now, and I have now received an error code during the import.meas function.
For background, this data was collected in Auto Resp. And I have already converted my background files (both before and after) along with converting the RMR measurement file from percent_a.s. to mg_per_l using the convert.respirometry function. This worked seamlessly and provided a new a file, which I have then used in following function.
I then imported the info about the chamber volume and animal mass using the input.info function.
The background files were imported via the import.test function, and this provided no errors.
But I then try to import the RMR file via import.meas and receive this error code.
Error in `$<-.data.frame`(`*tmp*`, "Time", value = c(1L, 2L, 3L, 4L, 5L, : replacement has 23040 rows, data has 22974
Any help would be appreciated. I have uploaded my RMR raw file and the converted file.
Uploaded files:- You need to login to have access to uploads.
Quote from Sergey Morozov on November 5, 2021, 3:53 pmDear Sir/Madam,
Thank you a lot for informing us about this issue and attaching sample files.
I will work on it in the beginning of the next week and let you know about the results here.Have a nice weekend,
Sergey
Dear Sir/Madam,
Thank you a lot for informing us about this issue and attaching sample files.
I will work on it in the beginning of the next week and let you know about the results here.
Have a nice weekend,
Sergey
Quote from Sergey Morozov on November 9, 2021, 5:48 pmHello Joshua,
Based on the source code of the 'import.meas' function, FishResp expects to have a similar length of all measurement phases (i.e. 120 raws in your case per measurement phase). When some measurement phases (M5 in your case) are different in length than M1, this error will pop up.
The quick fix for you is to find and remove all raws with a mismatched length of measurement phases (in your file only raws with 'M5'). Then, raw data will be imported without problems.
HOWEVER, such sensitivity to raw data might be considered as a bug, thus I need to double check that there is no side affect on other parts of the FishResp pipeline if I get rid of length crosschecking. I will be able to work on it and submit a new version of the R package to CRAN only next week.
BUT, you are free to modify this function inside the R package and share the result if you find a suitable solution here or on GitHub webpage.
[spoiler title="Potential source code that should be changed to avoid length mismatch error in the function 'import.meas' "]
# here is a quick lesson in how to create an ordered factor # note the odering of levels for the factor 'Phase' in the current dataframe levels(MR.data.all$Phase) # now creating the re-ordered factor z <- MR.data.all$Phase z <- gsub("[M]","",z) z <- as.numeric(z) x <- ordered(MR.data.all$Phase, levels=paste(rep("M",length(levels(MR.data.all$Phase))), head(z, n=1):tail(z, n=1), sep="")) MR.data.all$Phase<-x rm(x) # note the new class of 'Phase' and the new ordering levels(MR.data.all$Phase)[/spoiler]
Hope, either a quick fix or the next R package update will work for you. Do not hesitate to ask further questions!
Best wishes,
Sergey
Hello Joshua,
Based on the source code of the 'import.meas' function, FishResp expects to have a similar length of all measurement phases (i.e. 120 raws in your case per measurement phase). When some measurement phases (M5 in your case) are different in length than M1, this error will pop up.
The quick fix for you is to find and remove all raws with a mismatched length of measurement phases (in your file only raws with 'M5'). Then, raw data will be imported without problems.
HOWEVER, such sensitivity to raw data might be considered as a bug, thus I need to double check that there is no side affect on other parts of the FishResp pipeline if I get rid of length crosschecking. I will be able to work on it and submit a new version of the R package to CRAN only next week.
BUT, you are free to modify this function inside the R package and share the result if you find a suitable solution here or on GitHub webpage.
# here is a quick lesson in how to create an ordered factor # note the odering of levels for the factor 'Phase' in the current dataframe levels(MR.data.all$Phase) # now creating the re-ordered factor z <- MR.data.all$Phase z <- gsub("[M]","",z) z <- as.numeric(z) x <- ordered(MR.data.all$Phase, levels=paste(rep("M",length(levels(MR.data.all$Phase))), head(z, n=1):tail(z, n=1), sep="")) MR.data.all$Phase<-x rm(x) # note the new class of 'Phase' and the new ordering levels(MR.data.all$Phase)
Hope, either a quick fix or the next R package update will work for you. Do not hesitate to ask further questions!
Best wishes,
Sergey