un-R поведение ud.convert () - PullRequest
       19

un-R поведение ud.convert ()

2 голосов
/ 15 марта 2019

Вот 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, чтобы предложить изменение;)

...