Nano Hash - криптовалюты, майнинг, программирование

если еще | Несоответствие

Моя цель - сравнить элементы в двух векторах.

Вот мой первый Тиббл:

Post_Rev
# A tibble: 12 x 2
   Fiscal.Quarter.ID        Rev
       <S3: yearqtr>      <dbl>
1            2014 Q1 3889692022
2            2014 Q2 3763028239
3            2014 Q3 4092263526
4            2014 Q4 4865950809
5            2015 Q1 4015879019
6            2015 Q2 4112382310
7            2015 Q3 4247783642
8            2015 Q4 5040074056
9            2016 Q1 4100946981
10           2016 Q2 4021051564
11           2016 Q3 4373665674
12           2016 Q4 5064779447

Вот мой второй вектор:

Total_Rev
 [1] 3889692022 3763028239 4092263526 4865950809 4015879019 4112382310 4247783642 5040074056
 [9] 4100946981 4021051564 4373665674 5064779447

Как мы видим, два вектора, то есть Rev в Post_Rev и Total_Rev, равны. Я также покажу вам тип класса.

class(Post_Rev$Rev)
[1] "numeric"

class(Total_Rev)
[1] "numeric"

Однако, когда я запускаю ifelse, для некоторых строк выдаются «неравные строки»:

ifelse(Post_Rev$Rev != Total_Rev,TRUE,FALSE)
 [1] FALSE  **TRUE** FALSE FALSE FALSE FALSE FALSE FALSE  **TRUE  TRUE** FALSE FALSE

Что может быть причиной? Можно ли как-то узнать причину? Буду признателен за ваши мысли.

Я попробовал функцию Уикхема if_else:

if_else(Post_Rev$Rev != Total_Rev,TRUE,FALSE)
 [1] FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE

Я получил тот же результат. Я не уверен, почему это происходит.


Добавление dput():

dput(Post_Rev)
structure(list(Fiscal.Quarter.ID = structure(c(2014, 2014.25, 
2014.5, 2014.75, 2015, 2015.25, 2015.5, 2015.75, 2016, 2016.25, 
2016.5, 2016.75), class = "yearqtr"), Rev = c(3889692022.46776, 
3763028239.33219, 4092263526.07502, 4865950809.37372, 4015879019.37871, 
4112382310.2044, 4247783641.70853, 5040074055.98503, 4100946980.66123, 
4021051564.10049, 4373665674.01029, 5064779446.86354)), .Names = c("Fiscal.Quarter.ID", 
"Rev"), row.names = c(NA, -12L), class = c("tbl_df", "tbl", "data.frame"
))

dput(Total_Rev)
c(3889692022.46776, 3763028239.33219, 4092263526.07502, 4865950809.37372, 
4015879019.37871, 4112382310.2044, 4247783641.70853, 5040074055.98503, 
4100946980.66123, 4021051564.10049, 4373665674.01029, 5064779446.86354
22.08.2016

  • Как мы видим, два вектора, то есть Rev в Post_Rev и Total_Rev, равны. Первое правило сравнения чисел с компьютерами состоит в том, чтобы не путать то, что вы видите напечатано на экране, с фактическим значением. Дважды проверьте те, которые говорит ifelse, не равны all.equal(). 22.08.2016
  • (также ifelse лишний, так как == и != уже векторизованы) 22.08.2016
  • Джоран, большое спасибо за помощь. Когда я запустил all.equal(Post_Rev$Rev,Total_Rev), я получил [1] TRUE, что означает, что массивы равны. Не могли бы вы объяснить, почему ifelse не сказал, что числа равны в приведенном выше случае? Мне интересно. Я новичок и недавно начал программировать на R. Буду признателен за ваши мысли. 22.08.2016
  • Я не могу сделать намного больше, если вы не добавите в свой вопрос вывод dput() как для Post_Rev, так и для Total_Rev. 22.08.2016
  • Попробуйте сделать это, так как оба значения числовые, вычтите их, и если результат равен 0, то истина, иначе ложь 22.08.2016
  • Это часто задаваемые вопросы, Джек. Числовые значения не отображаются с полным уровнем точности. 22.08.2016
  • hep.by/gnu/r-patched/r- faq/R-FAQ_82.html (R FAQ 7.31) 22.08.2016
  • @Joran, я добавил dput() выше. 22.08.2016
  • Забавно, что опубликованные вами структуры данных не демонстрируют проблемного поведения, на котором основывается ваш вопрос. (Все сообщает, что все они равны.) Так что я определенно не могу помочь в данных обстоятельствах. :) 22.08.2016

Ответы:


1

Я думал ответить на этот вопрос. r2evans и 42 на высоте:

Когда мы вычитаем числа, мы видим, что есть разница в числах.

Post_Rev$Rev-Total_Rev
 [1]  0.000000e+00 -4.768372e-07  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
 [7]  0.000000e+00  0.000000e+00 -4.768372e-07 -4.768372e-07  0.000000e+00  0.000000e+00
22.08.2016
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..