Mercurial > repos > prog > lcmsmatching
comparison tostr.R @ 0:e66bb061af06 draft
planemo upload for repository https://github.com/workflow4metabolomics/lcmsmatching.git commit 3529b25417f8e1a5836474c9adec4b696d35099d-dirty
author | prog |
---|---|
date | Tue, 12 Jul 2016 12:02:37 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:e66bb061af06 |
---|---|
1 source("tolst.R") | |
2 | |
3 # Convert lists and objects to string representation. Supported outputs are: | |
4 # _ Text. | |
5 # _ PHP code. | |
6 # _ R code (to be done). | |
7 | |
8 ########################## | |
9 # SET STRING TO VARIABLE # | |
10 ########################## | |
11 | |
12 # str The value converted to a string. | |
13 # mode The mode to use. | |
14 # var Variable name. | |
15 .set_str_to_variable <- function(str, mode = 'txt', var = NA_character_) { | |
16 | |
17 # Add variable | |
18 switch(mode, | |
19 txt = { str <- paste(var, '=', str) }, | |
20 php = { str <- paste0('$', var, ' = ', str, ';') }, | |
21 stop("Unknown mode '", mode, "'.") | |
22 ) | |
23 | |
24 return(str) | |
25 } | |
26 | |
27 ################ | |
28 # QUOTE VALUES # | |
29 ################ | |
30 | |
31 # values A vector of values. | |
32 # mode The mode to use. | |
33 # keys If the vector contains keys of a dictionary structured (depending on the mode, they will be quoted or not). | |
34 .quote_values <- function(values, mode = 'txt', keys = FALSE) { | |
35 | |
36 if (mode == 'txt' && keys) | |
37 return(values) | |
38 | |
39 # Quote string values | |
40 # TODO escape quote characters | |
41 if (is.character(values)) | |
42 return(unlist(lapply(values, function(x) { paste0('"', x, '"') } ))) | |
43 | |
44 return(values) | |
45 } | |
46 | |
47 ############ | |
48 # SET KEYS # | |
49 ############ | |
50 | |
51 # values Vector or list of values. | |
52 # mode The mode to use. | |
53 .set_keys <- function(values, mode = 'txt') { | |
54 | |
55 if ( ! is.null(names(values))) { | |
56 keys <- names(values) | |
57 indices <- 1:length(values) | |
58 switch(mode, | |
59 txt = { values <- lapply(indices, function(x) paste( if (nchar(keys[[x]]) == 0) x else keys[[x]], '=>', values[[x]])) }, | |
60 php = { values <- lapply(names(values), function(x) paste0('"', if (nchar(keys[[x]]) == 0) x else keys[[x]], '"', ' => ', values[[x]])) }, | |
61 stop("Unknown mode '", mode, "'.") | |
62 ) | |
63 } | |
64 | |
65 return(values) | |
66 } | |
67 | |
68 ############### | |
69 # JOIN VALUES # | |
70 ############### | |
71 | |
72 # values Vector or list of values to join. | |
73 # mode The mode to use. | |
74 .join_values <- function(values, mode = 'txt') { | |
75 | |
76 switch(mode, | |
77 txt = { str <- paste0('(', paste(values, collapse = ', '), ')') }, | |
78 php = { str <- paste0('[', paste(values, collapse = ', '), ']') }, | |
79 stop("Unknown mode '", mode, "'.") | |
80 ) | |
81 | |
82 return(str) | |
83 } | |
84 | |
85 ############### | |
86 # NULL TO STR # | |
87 ############### | |
88 | |
89 # value The NULL or NA value, or the vector of length 0. | |
90 # mode The mode to use. | |
91 # var Variable name. | |
92 .null_to_str <- function(value, mode = 'txt', var = NA_character_) { | |
93 | |
94 # Set to 'null' string | |
95 switch(mode, | |
96 txt = { str <- if (length(value) > 0 && is.na(value)) 'NA' else 'null' }, | |
97 php = { str <- 'NULL' }, | |
98 stop("Unknown mode '", mode, "'.") | |
99 ) | |
100 | |
101 if ( ! is.null(var) && ! is.na(var)) | |
102 str <- .set_str_to_variable(str, mode, var) | |
103 | |
104 return(str) | |
105 } | |
106 | |
107 ################ | |
108 # VALUE TO STR # | |
109 ################ | |
110 | |
111 # TODO hide this function ? value_to_str -> .value_to_str | |
112 | |
113 # value The value to convert. | |
114 # mode The mode to use. | |
115 # var Variable name. | |
116 # lst If true, print the output as a list or array, even if it contains only one value. | |
117 .value_to_str <- function(value, mode = 'txt', var = NA_character_, lst = FALSE) { | |
118 | |
119 if (is.null(value) || (length(value) == 0 && ! lst) || (length(value) > 0 && is.na(value))) | |
120 return(.null_to_str(value, mode = mode, var = var)) | |
121 | |
122 # Transform value to a string | |
123 value <- .quote_values(value, mode = mode) | |
124 str <- if (length(value) == 1 && ! lst && is.null(names(value))) as.character(value) else .join_values(.set_keys(value, mode = mode), mode = mode) | |
125 | |
126 # Set to variable | |
127 if ( ! is.null(var) && ! is.na(var)) | |
128 str <- .set_str_to_variable(str, mode, var) | |
129 | |
130 return(str) | |
131 } | |
132 | |
133 ############### | |
134 # LIST TO STR # | |
135 ############### | |
136 | |
137 # vlist The list to convert. | |
138 # mode The mode to use. | |
139 # var Variable name. | |
140 # lst If true, print the output as a list or array, even if it contains only one value. | |
141 .list_to_str <- function(vlist, mode = 'txt', var = NA_character_, lst = FALSE) { | |
142 | |
143 if (is.null(vlist) || (length(vlist) == 0 && ! lst) || (length(vlist) > 0 && is.na(vlist))) | |
144 return(.null_to_str(vlist, mode = mode, var = var)) | |
145 | |
146 # | |
147 vstr <- character() | |
148 if (length(vlist) > 0) { | |
149 keys <- unlist(lapply(names(vlist), function(x) if (nchar(x) == 0) x else .quote_values(x, mode = mode, keys = TRUE))) | |
150 values <- lapply(vlist, function(x) tostr(x, mode = mode)) | |
151 sep <- switch(mode, | |
152 txt = '=>', | |
153 php = '=>', | |
154 stop("Unknown mode '", mode, "'.") | |
155 ) | |
156 vstr <- unlist(lapply(1:length(vlist), function(i) if (is.null(keys) || nchar(keys[i]) == 0) values[[i]] else paste(keys[i], sep, values[[i]]))) | |
157 } | |
158 | |
159 # Join string values | |
160 if (length(vstr) > 1 || lst || ! is.null(keys)) | |
161 str <- .join_values(vstr, mode = mode) | |
162 else | |
163 str <- vstr | |
164 | |
165 # Set to variable | |
166 if ( ! is.null(var) && ! is.na(var)) | |
167 str <- .set_str_to_variable(str, mode, var) | |
168 | |
169 return(str) | |
170 } | |
171 | |
172 ########## | |
173 # TO STR # | |
174 ########## | |
175 | |
176 # obj The object to convert. | |
177 # mode The mode to use. | |
178 # var Variable name. | |
179 # lst If true, print the output as a list or array, even if it contains only one value. | |
180 tostr <- function(obj, mode = 'txt', var = NA_character_, lst = FALSE) { | |
181 | |
182 switch(typeof(obj), | |
183 S4 = str <- tostr(tolst(obj), mode = mode, var = var, lst = lst), | |
184 list = str <- .list_to_str(obj, mode = mode, var = var, lst = lst), | |
185 str <- .value_to_str(obj, mode = mode, var = var, lst = lst) | |
186 ) | |
187 | |
188 return(str) | |
189 } |