#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.