Предоставленный r-скрипт соответствует требованиям или нет

#r

#r

Вопрос:

Обычно я работаю над программированием на SQL и Python, но внезапно мне приходится перепроектировать фрагмент кода из R, но я хотел бы знать, правильна ли логика, которую я нашел из этого кода, или нет. Спасибо за обновление:

Сайт Pr F открыт, Pr L Subj — столбец даты и времени, а Pr # требуемый subj — столбец целых чисел

 Date        Original Projection
11-May-18     0
12-May-19 
  

R-скрипт:

 # Builds the "Original Projection" series.
  original.projection <- function() {
    data.frame(
      Date = c(clinAct$`Pr F Site Open`, clinAct$`Pr L Subj`),
      `Original Projection` = c(0L, clinAct$`Pr # required subj`),
      check.names = F
    )
  }
  

#Логика, которую я понял,

Функция определяется как исходная проекция, а столбец берется Pr # required subj в качестве входных данных, но я не уверен, что означает 0L. я также вижу, что используется функция c (), и я предполагаю ее объединение.

Для столбца даты существует объединение между двумя столбцами Pr F Site и Pr L Subj

Ответ №1:

Функция c () объединит значения из обоих столбцов ( Pr F Site Open и Pr L Subj ) вместе. Теперь, когда вы видите L после числа в R, это означает, что вам нужно целое число из этого числа. Я рекомендую вам запустить приведенный ниже код, чтобы увидеть, как функция c () объединяет значения этих столбцов. Я разделяю эти два столбца и возвращаю их вам в виде списка. Я сделал это, потому что структура data.frame R имеет правило, согласно которому в каждом столбце должно быть одинаковое количество строк. Поэтому вполне вероятно, что ваша функция выдаст ошибку «аргументы подразумевают разное количество строк», если вы объедините эти столбцы в одном и том же data.frame. Надеюсь, я вам каким-то образом помогу.

 clinAct <- data.frame(
  `Pr F Site Open` = as.Date(c("2020-01-01", "2020-01-02", "2020-01-03", "2020-01-04", "2020-01-05")),
  `Pr L Subj` = as.Date(c("2020-01-06", "2020-01-07", "2020-01-08", "2020-05-09", "2020-01-10")),
  `Pr # required subj` = 1:5,
  check.names = F
)

original.projection <- function() {
  first_column <- data.frame(
    Date = c(clinAct$`Pr F Site Open`, clinAct$`Pr L Subj`),
    check.names = F
  )
  
  second_column <- data.frame(
    `Original Projection` = c(0L, clinAct$`Pr # required subj`),
    check.names = F
  )
  
  return(list(first_column, second_column))
}

original.projection()
  

Комментарии:

1. большое спасибо, пожалуйста, посмотрите обновление столбцов. Это столбцы даты

2. Функция c () будет объединять, какие бы значения она ни имела. Пока значения обоих столбцов являются датами, c() вернет вектор с датами из этих двух столбцов. Теперь, если Pr # требуется, subj является целочисленным столбцом. Кто бы ни написал эту функцию, поставил 0L или, другими словами, запросил целое число 0, чтобы гарантировать, что R не приведет значения столбца # required subj к десятичным числам.

3. Не могли бы вы, пожалуйста, обновить свой ответ, указав тип даты и целые числа? Поэтому я могу пометить его как ответ.

4. Итак, 0L — это просто объявить его тип целым числом? и не похоже, что он заполняется значениями 0?

5. Ecsatly, 0L, предназначен только для того, чтобы гарантировать, что никакого преобразования не произойдет. При создании векторов в R вы должны убедиться, что все типы данных одинаковы. Если вы смешаете значения разных типов в векторе, R приведет все значения к наиболее гибкому типу из возможных. Я помещаю даты в формат год-месяц-день, потому что это основной формат дат в R.