CSV-file used for this script: ~/Data/CoordSys_FLT1-7_50x.csv


1. Goal of the script

This script formats the output of the resulting CSV-file from applying a template computing ISO25178 parameters in ConfoMap. The script will:

  1. Read in the original CSV-file (step #3)
  2. Format the data (step #4)
  3. Write an XLSX-file and save an R object ready for further analysis in R (step #5)

All files will be saved in a subfolder “Data” within the directory of the present Rmd file, i.e. “~/Data”.


2. Load packages

library(openxlsx)
library(tools)
library(R.utils)

3. Read in original CSV-file

imp.info <- file.info(params$data)
imp.data <- read.csv(params$data, header=FALSE, skip=3, stringsAsFactors=FALSE, na.strings="*****")

The imported file is: “~/Data/CoordSys_FLT1-7_50x.csv”
Its modification, ‘last status change’ (= ‘creation’ on Windows) and last access times are, respectively: “2018-09-27 16:39:21”, “2019-01-03 10:18:43” and “2019-01-03 10:18:43”.


4. Format data

4.1. Keep only interesting columns

keep.col <- c(1:2, 4:5, 7:9, 11:13, 15:53)
data.keep <- imp.data[keep.col]
str(data.keep)
'data.frame':   20 obs. of  49 variables:
 $ V1 : chr  "27/09/2018" "27/09/2018" "27/09/2018" "27/09/2018" ...
 $ V2 : chr  "15:20:31" "15:20:53" "15:22:14" "15:23:44" ...
 $ V4 : chr  "FLT1-7_LSM_50x-0.95_replica1_20180903_Topo" "FLT1-7_LSM_50x-0.95_replica2_20180903_Topo" "FLT1-7_LSM_50x-0.95_replica3_20180903_Topo" "FLT1-7_LSM_50x-0.95_replica4_20180903_Topo" ...
 $ V5 : chr  "03/09/2018 16:10" "03/09/2018 16:18" "03/09/2018 16:25" "03/09/2018 16:34" ...
 $ V7 : num  255 255 255 255 255 ...
 $ V8 : int  991 991 991 991 991 991 991 991 991 991 ...
 $ V9 : num  0.258 0.258 0.258 0.258 0.258 ...
 $ V11: num  255 255 255 255 255 ...
 $ V12: int  991 991 991 991 991 991 991 991 991 991 ...
 $ V13: num  0.258 0.258 0.258 0.258 0.258 ...
 $ V15: num  26.7 29.6 28.7 28.7 28.4 ...
 $ V16: int  65532 65532 65531 65532 65532 65532 65531 65532 65532 65532 ...
 $ V17: num  0.407 0.451 0.438 0.438 0.433 ...
 $ V18: num  0 0 0 0 0 0 0 0 0 0 ...
 $ V19: num  1.49 1.39 1.25 1.33 1.29 ...
 $ V20: num  -0.00297 0.09683 0.13965 0.09766 0.08338 ...
 $ V21: num  4.42 4.28 3.76 4.33 3.86 ...
 $ V22: num  6.07 6.21 5.92 6.24 6.01 ...
 $ V23: num  7.14 5.94 4.06 6.39 4.75 ...
 $ V24: num  13.2 12.15 9.98 12.62 10.76 ...
 $ V25: num  1.123 1.069 0.983 1.03 1.006 ...
 $ V26: num  0.293 0.258 0.183 0.167 0.183 ...
 $ V27: num  1.72 1.64 1.55 1.61 1.57 ...
 $ V28: num  3.04 2.82 2.53 2.65 2.57 ...
 $ V29: num  14.4 14.6 13.7 14.6 14.1 ...
 $ V30: num  0.761 0.812 0.741 0.827 0.777 ...
 $ V31: num  87.2 85.5 94.2 94.2 69.3 ...
 $ V32: logi  NA NA NA NA NA NA ...
 $ V33: logi  NA NA NA NA NA NA ...
 $ V34: num  0.0974 0.0825 0.0647 0.0742 0.0656 ...
 $ V35: num  1.81 1.72 1.61 1.68 1.64 ...
 $ V36: num  0.0974 0.0825 0.0647 0.0742 0.0656 ...
 $ V37: num  1.2 1.14 1.1 1.12 1.12 ...
 $ V38: num  1.63 1.55 1.47 1.52 1.49 ...
 $ V39: num  0.187 0.174 0.144 0.158 0.15 ...
 $ V40: num  2.51 2.46 2.35 2.42 2.4 ...
 $ V41: num  1.4 1.25 1.07 1.15 1.07 ...
 $ V42: num  1.48 1.37 1.15 1.29 1.2 ...
 $ V43: num  10.9 10.5 10.4 10.6 10.4 ...
 $ V44: num  87.1 87 87.7 87.8 88 ...
 $ V45: num  1.2 1.14 NA 1.1 NA ...
 $ V46: num  2.71 1.67 NA 2.83 NA ...
 $ V47: num  98.1 92.2 NA 98.9 NA ...
 $ V48: num  112.8 93.9 61.8 82.5 72.4 ...
 $ V49: num  90 90 90 90 90 ...
 $ V50: num  0.00361 0.00598 -0.00684 -0.00647 0.00911 ...
 $ V51: num  110.3 73.2 73.7 58.2 77 ...
 $ V52: num  -0.00452 0.0028 0.00173 -0.00307 0.00726 ...
 $ V53: num  -90 -90 -90 -90 -90 ...

4.2. Add headers

head.keep <- strsplit(readLines(params$data, n=3)[2], ",")[[1]][keep.col]
head.keep <- c("Analysis date","Analysis time", head.keep[-(1:2)])
names(data.keep) <- gsub("\\.+", "\\.", make.names(head.keep))
names(data.keep) <- gsub("\\.$", "", names(data.keep))
names(data.keep)
 [1] "Analysis.date"                                   
 [2] "Analysis.time"                                   
 [3] "Name.of.the.studiable"                           
 [4] "Date.of.the.measurement"                         
 [5] "Axis.length.X"                                   
 [6] "Axis.size.X"                                     
 [7] "Axis.spacing.X"                                  
 [8] "Axis.length.Y"                                   
 [9] "Axis.size.Y"                                     
[10] "Axis.spacing.Y"                                  
[11] "Axis.length.Z"                                   
[12] "Axis.size.Z"                                     
[13] "Axis.spacing.Z"                                  
[14] "NMP.ratio.Z"                                     
[15] "Sq"                                              
[16] "Ssk"                                             
[17] "Sku"                                             
[18] "Sp"                                              
[19] "Sv"                                              
[20] "Sz"                                              
[21] "Sa"                                              
[22] "Smr.c.1.µm.under.the.highest.peak"               
[23] "Smc.p.10"                                        
[24] "Sxp.p.50.q.97.5"                                 
[25] "Sal.s.0.2"                                       
[26] "Str.s.0.2"                                       
[27] "Std.Reference.angle.0"                           
[28] "Sdq"                                             
[29] "Sdr"                                             
[30] "Vm.p.10"                                         
[31] "Vv.p.10"                                         
[32] "Vmp.p.10"                                        
[33] "Vmc.p.10.q.80"                                   
[34] "Vvc.p.10.q.80"                                   
[35] "Vvv.p.80"                                        
[36] "Sk.Gaussian.filter.0.08.mm.End.effects.managed"  
[37] "Spk.Gaussian.filter.0.08.mm.End.effects.managed" 
[38] "Svk.Gaussian.filter.0.08.mm.End.effects.managed" 
[39] "Smr1.Gaussian.filter.0.08.mm.End.effects.managed"
[40] "Smr2.Gaussian.filter.0.08.mm.End.effects.managed"
[41] "Spq.Gaussian.filter.0.08.mm.End.effects.managed" 
[42] "Svq.Gaussian.filter.0.08.mm.End.effects.managed" 
[43] "Smq.Gaussian.filter.0.08.mm.End.effects.managed" 
[44] "Distance.A"                                      
[45] "Angle.X.axis.A"                                  
[46] "Angle.Y.axis.A"                                  
[47] "Distance.B"                                      
[48] "Angle.X.axis.B"                                  
[49] "Angle.Y.axis.B"                                  

4.3. Save units

col.var <- 5:length(data.keep)
names.var <- names(data.keep)[col.var]
units.var <- strsplit(readLines(params$data, n=3)[3], ",")[[1]][keep.col]
units.var <- units.var[col.var]
units.var <- c(units.var, "µm", "µm") ## in planing for X/Y shift! ##
units.var.table <- data.frame(variable=c(names(data.keep)[col.var],"Xshift","Yshift"), unit=units.var)
names(units.var) <- c(names.var,"Xshift","Yshift")
units.var.table
                                           variable      unit
1                                     Axis.length.X        µm
2                                       Axis.size.X    points
3                                    Axis.spacing.X        µm
4                                     Axis.length.Y        µm
5                                       Axis.size.Y    points
6                                    Axis.spacing.Y        µm
7                                     Axis.length.Z        µm
8                                       Axis.size.Z    digits
9                                    Axis.spacing.Z        nm
10                                      NMP.ratio.Z         %
11                                               Sq        µm
12                                              Ssk <no unit>
13                                              Sku <no unit>
14                                               Sp        µm
15                                               Sv        µm
16                                               Sz        µm
17                                               Sa        µm
18                Smr.c.1.µm.under.the.highest.peak         %
19                                         Smc.p.10        µm
20                                  Sxp.p.50.q.97.5        µm
21                                        Sal.s.0.2        µm
22                                        Str.s.0.2 <no unit>
23                            Std.Reference.angle.0         °
24                                              Sdq <no unit>
25                                              Sdr         %
26                                          Vm.p.10   µm³/µm²
27                                          Vv.p.10   µm³/µm²
28                                         Vmp.p.10   µm³/µm²
29                                    Vmc.p.10.q.80   µm³/µm²
30                                    Vvc.p.10.q.80   µm³/µm²
31                                         Vvv.p.80   µm³/µm²
32   Sk.Gaussian.filter.0.08.mm.End.effects.managed        µm
33  Spk.Gaussian.filter.0.08.mm.End.effects.managed        µm
34  Svk.Gaussian.filter.0.08.mm.End.effects.managed        µm
35 Smr1.Gaussian.filter.0.08.mm.End.effects.managed         %
36 Smr2.Gaussian.filter.0.08.mm.End.effects.managed         %
37  Spq.Gaussian.filter.0.08.mm.End.effects.managed <no unit>
38  Svq.Gaussian.filter.0.08.mm.End.effects.managed <no unit>
39  Smq.Gaussian.filter.0.08.mm.End.effects.managed <no unit>
40                                       Distance.A        µm
41                                   Angle.X.axis.A         °
42                                   Angle.Y.axis.A         °
43                                       Distance.B        µm
44                                   Angle.X.axis.B         °
45                                   Angle.Y.axis.B         °
46                                           Xshift        µm
47                                           Yshift        µm

4.4. Split the column ‘Analyzed.file’ into several columns

split.info <- strsplit(data.keep$Name.of.the.studiable,"_| > ")
data.final <- data.frame(do.call(rbind, split.info), data.keep[-3])
Warning in (function (..., deparse.level = 1) : number of columns of result
is not a multiple of vector length (arg 1)
data.final <- data.final[-(6:7)]
names(data.final)[1:5] <- c("Sample","Microscope","Objective","Replica","Acquisition.date")
str(data.final)
'data.frame':   20 obs. of  53 variables:
 $ Sample                                          : Factor w/ 1 level "FLT1-7": 1 1 1 1 1 1 1 1 1 1 ...
 $ Microscope                                      : Factor w/ 2 levels "LSM","Sneox": 1 1 1 1 1 1 1 1 1 1 ...
 $ Objective                                       : Factor w/ 2 levels "50x-0.8","50x-0.95": 2 2 2 2 2 2 2 2 2 2 ...
 $ Replica                                         : Factor w/ 10 levels "replica1","replica10",..: 1 3 4 5 6 7 8 9 10 2 ...
 $ Acquisition.date                                : Factor w/ 3 levels "20180903","20180905",..: 1 1 1 1 1 2 2 2 2 2 ...
 $ Analysis.date                                   : chr  "27/09/2018" "27/09/2018" "27/09/2018" "27/09/2018" ...
 $ Analysis.time                                   : chr  "15:20:31" "15:20:53" "15:22:14" "15:23:44" ...
 $ Date.of.the.measurement                         : chr  "03/09/2018 16:10" "03/09/2018 16:18" "03/09/2018 16:25" "03/09/2018 16:34" ...
 $ Axis.length.X                                   : num  255 255 255 255 255 ...
 $ Axis.size.X                                     : int  991 991 991 991 991 991 991 991 991 991 ...
 $ Axis.spacing.X                                  : num  0.258 0.258 0.258 0.258 0.258 ...
 $ Axis.length.Y                                   : num  255 255 255 255 255 ...
 $ Axis.size.Y                                     : int  991 991 991 991 991 991 991 991 991 991 ...
 $ Axis.spacing.Y                                  : num  0.258 0.258 0.258 0.258 0.258 ...
 $ Axis.length.Z                                   : num  26.7 29.6 28.7 28.7 28.4 ...
 $ Axis.size.Z                                     : int  65532 65532 65531 65532 65532 65532 65531 65532 65532 65532 ...
 $ Axis.spacing.Z                                  : num  0.407 0.451 0.438 0.438 0.433 ...
 $ NMP.ratio.Z                                     : num  0 0 0 0 0 0 0 0 0 0 ...
 $ Sq                                              : num  1.49 1.39 1.25 1.33 1.29 ...
 $ Ssk                                             : num  -0.00297 0.09683 0.13965 0.09766 0.08338 ...
 $ Sku                                             : num  4.42 4.28 3.76 4.33 3.86 ...
 $ Sp                                              : num  6.07 6.21 5.92 6.24 6.01 ...
 $ Sv                                              : num  7.14 5.94 4.06 6.39 4.75 ...
 $ Sz                                              : num  13.2 12.15 9.98 12.62 10.76 ...
 $ Sa                                              : num  1.123 1.069 0.983 1.03 1.006 ...
 $ Smr.c.1.µm.under.the.highest.peak               : num  0.293 0.258 0.183 0.167 0.183 ...
 $ Smc.p.10                                        : num  1.72 1.64 1.55 1.61 1.57 ...
 $ Sxp.p.50.q.97.5                                 : num  3.04 2.82 2.53 2.65 2.57 ...
 $ Sal.s.0.2                                       : num  14.4 14.6 13.7 14.6 14.1 ...
 $ Str.s.0.2                                       : num  0.761 0.812 0.741 0.827 0.777 ...
 $ Std.Reference.angle.0                           : num  87.2 85.5 94.2 94.2 69.3 ...
 $ Sdq                                             : logi  NA NA NA NA NA NA ...
 $ Sdr                                             : logi  NA NA NA NA NA NA ...
 $ Vm.p.10                                         : num  0.0974 0.0825 0.0647 0.0742 0.0656 ...
 $ Vv.p.10                                         : num  1.81 1.72 1.61 1.68 1.64 ...
 $ Vmp.p.10                                        : num  0.0974 0.0825 0.0647 0.0742 0.0656 ...
 $ Vmc.p.10.q.80                                   : num  1.2 1.14 1.1 1.12 1.12 ...
 $ Vvc.p.10.q.80                                   : num  1.63 1.55 1.47 1.52 1.49 ...
 $ Vvv.p.80                                        : num  0.187 0.174 0.144 0.158 0.15 ...
 $ Sk.Gaussian.filter.0.08.mm.End.effects.managed  : num  2.51 2.46 2.35 2.42 2.4 ...
 $ Spk.Gaussian.filter.0.08.mm.End.effects.managed : num  1.4 1.25 1.07 1.15 1.07 ...
 $ Svk.Gaussian.filter.0.08.mm.End.effects.managed : num  1.48 1.37 1.15 1.29 1.2 ...
 $ Smr1.Gaussian.filter.0.08.mm.End.effects.managed: num  10.9 10.5 10.4 10.6 10.4 ...
 $ Smr2.Gaussian.filter.0.08.mm.End.effects.managed: num  87.1 87 87.7 87.8 88 ...
 $ Spq.Gaussian.filter.0.08.mm.End.effects.managed : num  1.2 1.14 NA 1.1 NA ...
 $ Svq.Gaussian.filter.0.08.mm.End.effects.managed : num  2.71 1.67 NA 2.83 NA ...
 $ Smq.Gaussian.filter.0.08.mm.End.effects.managed : num  98.1 92.2 NA 98.9 NA ...
 $ Distance.A                                      : num  112.8 93.9 61.8 82.5 72.4 ...
 $ Angle.X.axis.A                                  : num  90 90 90 90 90 ...
 $ Angle.Y.axis.A                                  : num  0.00361 0.00598 -0.00684 -0.00647 0.00911 ...
 $ Distance.B                                      : num  110.3 73.2 73.7 58.2 77 ...
 $ Angle.X.axis.B                                  : num  -0.00452 0.0028 0.00173 -0.00307 0.00726 ...
 $ Angle.Y.axis.B                                  : num  -90 -90 -90 -90 -90 ...

4.5. Shorten the variable names

col.var2 <- 19:47
names(data.final)[col.var2] <- sapply(strsplit(names(data.final)[col.var2], ".", fixed=TRUE), `[[`, 1)
names(data.final)
 [1] "Sample"                  "Microscope"             
 [3] "Objective"               "Replica"                
 [5] "Acquisition.date"        "Analysis.date"          
 [7] "Analysis.time"           "Date.of.the.measurement"
 [9] "Axis.length.X"           "Axis.size.X"            
[11] "Axis.spacing.X"          "Axis.length.Y"          
[13] "Axis.size.Y"             "Axis.spacing.Y"         
[15] "Axis.length.Z"           "Axis.size.Z"            
[17] "Axis.spacing.Z"          "NMP.ratio.Z"            
[19] "Sq"                      "Ssk"                    
[21] "Sku"                     "Sp"                     
[23] "Sv"                      "Sz"                     
[25] "Sa"                      "Smr"                    
[27] "Smc"                     "Sxp"                    
[29] "Sal"                     "Str"                    
[31] "Std"                     "Sdq"                    
[33] "Sdr"                     "Vm"                     
[35] "Vv"                      "Vmp"                    
[37] "Vmc"                     "Vvc"                    
[39] "Vvv"                     "Sk"                     
[41] "Spk"                     "Svk"                    
[43] "Smr1"                    "Smr2"                   
[45] "Spq"                     "Svq"                    
[47] "Smq"                     "Distance.A"             
[49] "Angle.X.axis.A"          "Angle.Y.axis.A"         
[51] "Distance.B"              "Angle.X.axis.B"         
[53] "Angle.Y.axis.B"         

4.6. Format date columns

data.final$Acquisition.date <- as.Date(as.character(data.final$Acquisition.date), format="%Y%m%d")
data.final$Analysis.date <- as.Date(data.final$Analysis.date, format="%d/%m/%Y")
data.final$Date.of.the.measurement <- as.POSIXct(data.final$Date.of.the.measurement, format="%d/%m/%Y %H:%M:%S")
str(data.final)
'data.frame':   20 obs. of  53 variables:
 $ Sample                 : Factor w/ 1 level "FLT1-7": 1 1 1 1 1 1 1 1 1 1 ...
 $ Microscope             : Factor w/ 2 levels "LSM","Sneox": 1 1 1 1 1 1 1 1 1 1 ...
 $ Objective              : Factor w/ 2 levels "50x-0.8","50x-0.95": 2 2 2 2 2 2 2 2 2 2 ...
 $ Replica                : Factor w/ 10 levels "replica1","replica10",..: 1 3 4 5 6 7 8 9 10 2 ...
 $ Acquisition.date       : Date, format: "2018-09-03" "2018-09-03" ...
 $ Analysis.date          : Date, format: "2018-09-27" "2018-09-27" ...
 $ Analysis.time          : chr  "15:20:31" "15:20:53" "15:22:14" "15:23:44" ...
 $ Date.of.the.measurement: POSIXct, format: NA NA ...
 $ Axis.length.X          : num  255 255 255 255 255 ...
 $ Axis.size.X            : int  991 991 991 991 991 991 991 991 991 991 ...
 $ Axis.spacing.X         : num  0.258 0.258 0.258 0.258 0.258 ...
 $ Axis.length.Y          : num  255 255 255 255 255 ...
 $ Axis.size.Y            : int  991 991 991 991 991 991 991 991 991 991 ...
 $ Axis.spacing.Y         : num  0.258 0.258 0.258 0.258 0.258 ...
 $ Axis.length.Z          : num  26.7 29.6 28.7 28.7 28.4 ...
 $ Axis.size.Z            : int  65532 65532 65531 65532 65532 65532 65531 65532 65532 65532 ...
 $ Axis.spacing.Z         : num  0.407 0.451 0.438 0.438 0.433 ...
 $ NMP.ratio.Z            : num  0 0 0 0 0 0 0 0 0 0 ...
 $ Sq                     : num  1.49 1.39 1.25 1.33 1.29 ...
 $ Ssk                    : num  -0.00297 0.09683 0.13965 0.09766 0.08338 ...
 $ Sku                    : num  4.42 4.28 3.76 4.33 3.86 ...
 $ Sp                     : num  6.07 6.21 5.92 6.24 6.01 ...
 $ Sv                     : num  7.14 5.94 4.06 6.39 4.75 ...
 $ Sz                     : num  13.2 12.15 9.98 12.62 10.76 ...
 $ Sa                     : num  1.123 1.069 0.983 1.03 1.006 ...
 $ Smr                    : num  0.293 0.258 0.183 0.167 0.183 ...
 $ Smc                    : num  1.72 1.64 1.55 1.61 1.57 ...
 $ Sxp                    : num  3.04 2.82 2.53 2.65 2.57 ...
 $ Sal                    : num  14.4 14.6 13.7 14.6 14.1 ...
 $ Str                    : num  0.761 0.812 0.741 0.827 0.777 ...
 $ Std                    : num  87.2 85.5 94.2 94.2 69.3 ...
 $ Sdq                    : logi  NA NA NA NA NA NA ...
 $ Sdr                    : logi  NA NA NA NA NA NA ...
 $ Vm                     : num  0.0974 0.0825 0.0647 0.0742 0.0656 ...
 $ Vv                     : num  1.81 1.72 1.61 1.68 1.64 ...
 $ Vmp                    : num  0.0974 0.0825 0.0647 0.0742 0.0656 ...
 $ Vmc                    : num  1.2 1.14 1.1 1.12 1.12 ...
 $ Vvc                    : num  1.63 1.55 1.47 1.52 1.49 ...
 $ Vvv                    : num  0.187 0.174 0.144 0.158 0.15 ...
 $ Sk                     : num  2.51 2.46 2.35 2.42 2.4 ...
 $ Spk                    : num  1.4 1.25 1.07 1.15 1.07 ...
 $ Svk                    : num  1.48 1.37 1.15 1.29 1.2 ...
 $ Smr1                   : num  10.9 10.5 10.4 10.6 10.4 ...
 $ Smr2                   : num  87.1 87 87.7 87.8 88 ...
 $ Spq                    : num  1.2 1.14 NA 1.1 NA ...
 $ Svq                    : num  2.71 1.67 NA 2.83 NA ...
 $ Smq                    : num  98.1 92.2 NA 98.9 NA ...
 $ Distance.A             : num  112.8 93.9 61.8 82.5 72.4 ...
 $ Angle.X.axis.A         : num  90 90 90 90 90 ...
 $ Angle.Y.axis.A         : num  0.00361 0.00598 -0.00684 -0.00647 0.00911 ...
 $ Distance.B             : num  110.3 73.2 73.7 58.2 77 ...
 $ Angle.X.axis.B         : num  -0.00452 0.0028 0.00173 -0.00307 0.00726 ...
 $ Angle.Y.axis.B         : num  -90 -90 -90 -90 -90 ...

4.7. Calculate X/Y shifts

data.final[1:10,"Xshift"] <- abs(data.final[1:10,"Distance.A"] - data.final[1,"Distance.A"])
data.final[11:20,"Xshift"] <- abs(data.final[11:20,"Distance.A"] - data.final[11,"Distance.A"])
data.final[1:10,"Yshift"] <- abs(data.final[1:10,"Distance.B"] - data.final[1,"Distance.B"])
data.final[11:20,"Yshift"] <- abs(data.final[11:20,"Distance.B"] - data.final[11,"Distance.B"])
data.final[c("Microscope","Replica","Xshift","Yshift")]
   Microscope   Replica     Xshift     Yshift
1         LSM  replica1   0.000000  0.0000000
2         LSM  replica2  18.851380 37.1220103
3         LSM  replica3  50.999715 36.5725880
4         LSM  replica4  30.307684 52.1073457
5         LSM  replica5  40.398741 33.2768377
6         LSM  replica6  29.622459 14.6376101
7         LSM  replica7  88.725450 18.0713862
8         LSM  replica8  33.304726  1.5727510
9         LSM  replica9  33.303371  3.8570131
10        LSM replica10  51.091176 14.9367229
11      Sneox  replica1   0.000000  0.0000000
12      Sneox  replica2  60.038194  4.3587697
13      Sneox  replica3  62.799900  0.7891714
14      Sneox  replica4  50.233881 18.7775508
15      Sneox  replica5 115.447874 21.4503753
16      Sneox  replica6  11.487581 27.1006115
17      Sneox  replica7  47.290797 30.4415355
18      Sneox  replica8   5.006597 33.0559393
19      Sneox  replica9  44.509733 55.4592711
20      Sneox replica10 129.299897 61.3739679

4.8. Add units as comment()

comment(data.final) <- units.var

Type comment(data.final) to check the units of the columns.

                                   Axis.length.X 
                                            "µm" 
                                     Axis.size.X 
                                        "points" 
                                  Axis.spacing.X 
                                            "µm" 
                                   Axis.length.Y 
                                            "µm" 
                                     Axis.size.Y 
                                        "points" 
                                  Axis.spacing.Y 
                                            "µm" 
                                   Axis.length.Z 
                                            "µm" 
                                     Axis.size.Z 
                                        "digits" 
                                  Axis.spacing.Z 
                                            "nm" 
                                     NMP.ratio.Z 
                                             "%" 
                                              Sq 
                                            "µm" 
                                             Ssk 
                                     "<no unit>" 
                                             Sku 
                                     "<no unit>" 
                                              Sp 
                                            "µm" 
                                              Sv 
                                            "µm" 
                                              Sz 
                                            "µm" 
                                              Sa 
                                            "µm" 
               Smr.c.1.µm.under.the.highest.peak 
                                             "%" 
                                        Smc.p.10 
                                            "µm" 
                                 Sxp.p.50.q.97.5 
                                            "µm" 
                                       Sal.s.0.2 
                                            "µm" 
                                       Str.s.0.2 
                                     "<no unit>" 
                           Std.Reference.angle.0 
                                             "°" 
                                             Sdq 
                                     "<no unit>" 
                                             Sdr 
                                             "%" 
                                         Vm.p.10 
                                       "µm³/µm²" 
                                         Vv.p.10 
                                       "µm³/µm²" 
                                        Vmp.p.10 
                                       "µm³/µm²" 
                                   Vmc.p.10.q.80 
                                       "µm³/µm²" 
                                   Vvc.p.10.q.80 
                                       "µm³/µm²" 
                                        Vvv.p.80 
                                       "µm³/µm²" 
  Sk.Gaussian.filter.0.08.mm.End.effects.managed 
                                            "µm" 
 Spk.Gaussian.filter.0.08.mm.End.effects.managed 
                                            "µm" 
 Svk.Gaussian.filter.0.08.mm.End.effects.managed 
                                            "µm" 
Smr1.Gaussian.filter.0.08.mm.End.effects.managed 
                                             "%" 
Smr2.Gaussian.filter.0.08.mm.End.effects.managed 
                                             "%" 
 Spq.Gaussian.filter.0.08.mm.End.effects.managed 
                                     "<no unit>" 
 Svq.Gaussian.filter.0.08.mm.End.effects.managed 
                                     "<no unit>" 
 Smq.Gaussian.filter.0.08.mm.End.effects.managed 
                                     "<no unit>" 
                                      Distance.A 
                                            "µm" 
                                  Angle.X.axis.A 
                                             "°" 
                                  Angle.Y.axis.A 
                                             "°" 
                                      Distance.B 
                                            "µm" 
                                  Angle.X.axis.B 
                                             "°" 
                                  Angle.Y.axis.B 
                                             "°" 
                                          Xshift 
                                            "µm" 
                                          Yshift 
                                            "µm" 

4.9. Check the result

str(data.final)
'data.frame':   20 obs. of  55 variables:
 $ Sample                 : Factor w/ 1 level "FLT1-7": 1 1 1 1 1 1 1 1 1 1 ...
 $ Microscope             : Factor w/ 2 levels "LSM","Sneox": 1 1 1 1 1 1 1 1 1 1 ...
 $ Objective              : Factor w/ 2 levels "50x-0.8","50x-0.95": 2 2 2 2 2 2 2 2 2 2 ...
 $ Replica                : Factor w/ 10 levels "replica1","replica10",..: 1 3 4 5 6 7 8 9 10 2 ...
 $ Acquisition.date       : Date, format: "2018-09-03" "2018-09-03" ...
 $ Analysis.date          : Date, format: "2018-09-27" "2018-09-27" ...
 $ Analysis.time          : chr  "15:20:31" "15:20:53" "15:22:14" "15:23:44" ...
 $ Date.of.the.measurement: POSIXct, format: NA NA ...
 $ Axis.length.X          : num  255 255 255 255 255 ...
 $ Axis.size.X            : int  991 991 991 991 991 991 991 991 991 991 ...
 $ Axis.spacing.X         : num  0.258 0.258 0.258 0.258 0.258 ...
 $ Axis.length.Y          : num  255 255 255 255 255 ...
 $ Axis.size.Y            : int  991 991 991 991 991 991 991 991 991 991 ...
 $ Axis.spacing.Y         : num  0.258 0.258 0.258 0.258 0.258 ...
 $ Axis.length.Z          : num  26.7 29.6 28.7 28.7 28.4 ...
 $ Axis.size.Z            : int  65532 65532 65531 65532 65532 65532 65531 65532 65532 65532 ...
 $ Axis.spacing.Z         : num  0.407 0.451 0.438 0.438 0.433 ...
 $ NMP.ratio.Z            : num  0 0 0 0 0 0 0 0 0 0 ...
 $ Sq                     : num  1.49 1.39 1.25 1.33 1.29 ...
 $ Ssk                    : num  -0.00297 0.09683 0.13965 0.09766 0.08338 ...
 $ Sku                    : num  4.42 4.28 3.76 4.33 3.86 ...
 $ Sp                     : num  6.07 6.21 5.92 6.24 6.01 ...
 $ Sv                     : num  7.14 5.94 4.06 6.39 4.75 ...
 $ Sz                     : num  13.2 12.15 9.98 12.62 10.76 ...
 $ Sa                     : num  1.123 1.069 0.983 1.03 1.006 ...
 $ Smr                    : num  0.293 0.258 0.183 0.167 0.183 ...
 $ Smc                    : num  1.72 1.64 1.55 1.61 1.57 ...
 $ Sxp                    : num  3.04 2.82 2.53 2.65 2.57 ...
 $ Sal                    : num  14.4 14.6 13.7 14.6 14.1 ...
 $ Str                    : num  0.761 0.812 0.741 0.827 0.777 ...
 $ Std                    : num  87.2 85.5 94.2 94.2 69.3 ...
 $ Sdq                    : logi  NA NA NA NA NA NA ...
 $ Sdr                    : logi  NA NA NA NA NA NA ...
 $ Vm                     : num  0.0974 0.0825 0.0647 0.0742 0.0656 ...
 $ Vv                     : num  1.81 1.72 1.61 1.68 1.64 ...
 $ Vmp                    : num  0.0974 0.0825 0.0647 0.0742 0.0656 ...
 $ Vmc                    : num  1.2 1.14 1.1 1.12 1.12 ...
 $ Vvc                    : num  1.63 1.55 1.47 1.52 1.49 ...
 $ Vvv                    : num  0.187 0.174 0.144 0.158 0.15 ...
 $ Sk                     : num  2.51 2.46 2.35 2.42 2.4 ...
 $ Spk                    : num  1.4 1.25 1.07 1.15 1.07 ...
 $ Svk                    : num  1.48 1.37 1.15 1.29 1.2 ...
 $ Smr1                   : num  10.9 10.5 10.4 10.6 10.4 ...
 $ Smr2                   : num  87.1 87 87.7 87.8 88 ...
 $ Spq                    : num  1.2 1.14 NA 1.1 NA ...
 $ Svq                    : num  2.71 1.67 NA 2.83 NA ...
 $ Smq                    : num  98.1 92.2 NA 98.9 NA ...
 $ Distance.A             : num  112.8 93.9 61.8 82.5 72.4 ...
 $ Angle.X.axis.A         : num  90 90 90 90 90 ...
 $ Angle.Y.axis.A         : num  0.00361 0.00598 -0.00684 -0.00647 0.00911 ...
 $ Distance.B             : num  110.3 73.2 73.7 58.2 77 ...
 $ Angle.X.axis.B         : num  -0.00452 0.0028 0.00173 -0.00307 0.00726 ...
 $ Angle.Y.axis.B         : num  -90 -90 -90 -90 -90 ...
 $ Xshift                 : num  0 18.9 51 30.3 40.4 ...
 $ Yshift                 : num  0 37.1 36.6 52.1 33.3 ...
 - attr(*, "comment")= Named chr  "µm" "points" "µm" "µm" ...
  ..- attr(*, "names")= chr  "Axis.length.X" "Axis.size.X" "Axis.spacing.X" "Axis.length.Y" ...
head(data.final)
  Sample Microscope Objective  Replica Acquisition.date Analysis.date
1 FLT1-7        LSM  50x-0.95 replica1       2018-09-03    2018-09-27
2 FLT1-7        LSM  50x-0.95 replica2       2018-09-03    2018-09-27
3 FLT1-7        LSM  50x-0.95 replica3       2018-09-03    2018-09-27
4 FLT1-7        LSM  50x-0.95 replica4       2018-09-03    2018-09-27
5 FLT1-7        LSM  50x-0.95 replica5       2018-09-03    2018-09-27
6 FLT1-7        LSM  50x-0.95 replica6       2018-09-05    2018-09-27
  Analysis.time Date.of.the.measurement Axis.length.X Axis.size.X
1      15:20:31                    <NA>      255.3021         991
2      15:20:53                    <NA>      255.3021         991
3      15:22:14                    <NA>      255.3021         991
4      15:23:44                    <NA>      255.3021         991
5      15:25:11                    <NA>      255.3021         991
6      15:26:39                    <NA>      255.3021         991
  Axis.spacing.X Axis.length.Y Axis.size.Y Axis.spacing.Y Axis.length.Z
1      0.2578809      255.3021         991      0.2578809      26.69617
2      0.2578809      255.3021         991      0.2578809      29.55225
3      0.2578809      255.3021         991      0.2578809      28.71343
4      0.2578809      255.3021         991      0.2578809      28.69171
5      0.2578809      255.3021         991      0.2578809      28.35742
6      0.2578809      255.3021         991      0.2578809      32.68677
  Axis.size.Z Axis.spacing.Z NMP.ratio.Z       Sq          Ssk      Sku
1       65532      0.4073760           0 1.488856 -0.002966167 4.421120
2       65532      0.4509590           0 1.394765  0.096825541 4.283292
3       65531      0.4381656           0 1.254221  0.139646542 3.760289
4       65532      0.4378275           0 1.334686  0.097659238 4.332912
5       65532      0.4327263           0 1.285165  0.083383595 3.856306
6       65532      0.4987909           0 1.330428  0.036058892 4.390863
        Sp       Sv       Sz        Sa       Smr      Smc      Sxp
1 6.067744 7.135436 13.20318 1.1231597 0.2934793 1.717098 3.036436
2 6.209435 5.938815 12.14825 1.0689597 0.2582295 1.638551 2.821328
3 5.919792 4.064468  9.98426 0.9830528 0.1827719 1.549140 2.531217
4 6.238691 6.385407 12.62410 1.0295042 0.1666355 1.606979 2.647887
5 6.008881 4.750513 10.75939 1.0062460 0.1827491 1.572206 2.569892
6 6.212940 6.449916 12.66286 1.0174876 0.1195299 1.566732 2.659812
       Sal       Str      Std Sdq Sdr         Vm       Vv        Vmp
1 14.36117 0.7612099 87.23766  NA  NA 0.09741393 1.814525 0.09741393
2 14.60693 0.8121991 85.49456  NA  NA 0.08249605 1.721069 0.08249605
3 13.68591 0.7405756 94.24377  NA  NA 0.06469333 1.613826 0.06469333
4 14.58735 0.8273841 94.24814  NA  NA 0.07415077 1.681125 0.07415077
5 14.10994 0.7773487 69.25086  NA  NA 0.06564710 1.637851 0.06564710
6 14.08142 0.7003128 87.00026  NA  NA 0.07765946 1.644378 0.07765946
       Vmc      Vvc       Vvv       Sk      Spk      Svk     Smr1     Smr2
1 1.200814 1.627802 0.1867230 2.511306 1.404585 1.484395 10.92020 87.09988
2 1.142106 1.547504 0.1735655 2.459655 1.249207 1.371687 10.49765 87.03377
3 1.096797 1.469758 0.1440681 2.345582 1.073786 1.150289 10.39377 87.65104
4 1.115129 1.522651 0.1584748 2.421481 1.146464 1.294831 10.62076 87.83815
5 1.119894 1.487974 0.1498769 2.395216 1.068226 1.195285 10.39062 88.01758
6 1.108574 1.481198 0.1631801 2.303756 1.178533 1.352933 10.99725 87.15786
       Spq      Svq      Smq Distance.A Angle.X.axis.A Angle.Y.axis.A
1 1.204824 2.714175 98.10662  112.76451       90.00361    0.003613407
2 1.137717 1.667827 92.19343   93.91312       90.00598    0.005982943
3       NA       NA       NA   61.76479       89.99316   -0.006839691
4 1.096027 2.827947 98.87538   82.45682       89.99353   -0.006471170
5       NA       NA       NA   72.36576       90.00911    0.009113466
6       NA       NA       NA   83.14205       90.00726    0.007260577
  Distance.B Angle.X.axis.B Angle.Y.axis.B   Xshift   Yshift
1  110.31013   -0.004515873      -90.00452  0.00000  0.00000
2   73.18812    0.002802429      -89.99720 18.85138 37.12201
3   73.73754    0.001728188      -89.99827 50.99971 36.57259
4   58.20278   -0.003070476      -90.00307 30.30768 52.10735
5   77.03329    0.007259025      -89.99274 40.39874 33.27684
6  124.94774   -0.008370959      -90.00837 29.62246 14.63761

5. Save data

5.1. Format file output name

file.out <- file_path_sans_ext(row.names(imp.info))

The files will be saved as “~/Data/CoordSys_FLT1-7_50x.[ext]”.

5.2. Write to XLSX

write.xlsx(list(data=data.final, units=units.var.table), file=paste0(file.out,".xlsx"))
xlsx.info <- file.info(paste0(file.out,".xlsx"))

The exported XLSX-file is: “CoordSys_FLT1-7_50x.xlsx”
Its modification, ‘last status change’ (= ‘creation’ on Windows) and last access times are, respectively: “2019-01-03 10:28:47”, “2019-01-03 10:27:28” and “2019-01-03 10:27:28”.

5.3. Save R object

saveObject(data.final, file=paste0(file.out,".Rbin"))
Rbin.info <- file.info(paste0(file.out,".Rbin"))

The exported Rbin-file is: “CoordSys_FLT1-7_50x.Rbin”
Its modification, ‘last status change’ (= ‘creation’ on Windows) and last access times are, respectively: “2019-01-03 10:28:47”, “2019-01-03 10:28:47” and “2019-01-03 10:28:47”.


sessionInfo()
R version 3.5.2 (2018-12-20)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 17134)

Matrix products: default

locale:
[1] LC_COLLATE=English_United Kingdom.1252 
[2] LC_CTYPE=English_United Kingdom.1252   
[3] LC_MONETARY=English_United Kingdom.1252
[4] LC_NUMERIC=C                           
[5] LC_TIME=English_United Kingdom.1252    

attached base packages:
[1] tools     stats     graphics  grDevices utils     datasets  methods  
[8] base     

other attached packages:
[1] R.utils_2.7.0     R.oo_1.22.0       R.methodsS3_1.7.1 openxlsx_4.1.0   

loaded via a namespace (and not attached):
 [1] Rcpp_1.0.0      digest_0.6.18   magrittr_1.5    evaluate_0.12  
 [5] zip_1.0.0       stringi_1.2.4   rmarkdown_1.11  stringr_1.3.1  
 [9] xfun_0.4        yaml_2.2.0      compiler_3.5.2  htmltools_0.3.6
[13] knitr_1.21     

END OF SCRIPT