Итак, я пытаюсь создать функцию, которая принимает входные данные, а затем возвращает выходные данные на основе других созданных функций.
Подсказка:
Write a function variable_summary to detect the data type with inputs:
`x`: A vector
`groups`: A factor vector of the same length as x
The function should return:
`binary_summary(x, groups)` if x is binary
`numeric_summary(x, groups)` if x is numeric
`NULL` if x is neither binary nor numeric
Я понимаю основную идеюкак это сделать, но мне не хватает некоторых деталей.
Мой код:
variable_summary <- function(x, group) {
if (all (x %in% 0:1)) {
return(binary_summary(x,group))
} else if (x %in% 0:max(x,na.rm = TRUE)) {
return(numeric_summary(x,group))
} else {
return("NULL")
}
}
Хорошая новость заключается в том, что код, по крайней мере, выполняется, но я знаю, что что-то сделал неправильно, так как это становится проблематичным, когда используется для этого предоставленного блока:
format_variable_summary <- function(var_summary){
options(scipen = 999) #to not use scientific notation
if(is.null(var_summary)) {return(NULL)}
out <- as.character(var_summary$missing)
if(var_summary$is.binary){
props <- as.character(round(100*var_summary$prop, 1))
props <- paste(props, "%", sep="")
out <- c(out, props, as.character(round(var_summary$p.value, 4)))
} else {
means <- as.character(round(var_summary$means, 2))
sds <- as.character(round(var_summary$sds, 2))
means_sds <- character(length(sds))
for(i in 1:length(means_sds)){
means_sds[i] <- paste(means[i], " (", sds[i], ")", sep = "")
}
out <- c(out, means_sds, as.character(round(var_summary$p.value, 4)))
}
options(scipen = 0) #sets back to the default: use scientifuc notation.
return(out)
}
format_variable_summary(variable_summary(titanic4$age, titanic4$pclass))
format_variable_summary(variable_summary(titanic4$survived, titanic4$pclass))
format_variable_summary(variable_summary(titanic4$cabin, titanic4$pclass))
[1] "263" "39.16 (14.55)" "29.51 (13.64)" "24.82 (11.96)"
[5] "0"
[1] "0" "%" "0"
Error: $ operator is invalid for atomic vectors
Итак, я знаю, что мой numeric_summary
работает, что-то не так с моим binary_summary
, и нулевое назначение вообще не работает.