Вот data.frame df
, в который я хочу преобразовать столбец value
в г / г (грамм / грамм). Первые две записи в ug / мг (микрограмм / миллиграмм) и две последние записи в нг / мг (нанограмм / миллиграмм). Однако функция ud.convert()
, похоже, учитывает только первую запись единицы (т.е. мкг / мг), с которой она сталкивается, чтобы затем преобразовать все записи value
из этой единицы, игнорируя изменение единиц измерения в строке # 3.
require(udunits2)
df = data.frame(
value = rep(1,4),
unit = c(rep('ug/mg', 2), rep('ng/mg', 2)),
stringsAsFactors = FALSE
)
df$value2 = ud.convert(df$value, df$unit, 'g/g')
df
# value unit value2
# 1 1 ug/mg 0.001
# 2 1 ug/mg 0.001
# 3 1 ng/mg 0.001
# 4 1 ng/mg 0.001
Каждая другая функция R, о которой я могу думать, выполняет такую операцию для каждой строки. Рассмотрим paste()
или substr()
:
paste(df$value, df$unit, 'g/g', sep = '---')
substr(df$unit,1,2)
По моему мнению, это очень не-R поведение ud.convert()
и должно быть изменено или, по крайней мере, должно быть дано предупреждение. Или я что-то упускаю? Преобразование происходит в C-функции R_ut_convert . К сожалению, я не знаю ни одного C, чтобы предложить изменение;)