У меня есть функция, которая берет фрейм данных и дает основную c сводную статистику. Моя проблема в том, что вывод функции не соответствует ожидаемому выводу.
# create my data frame
x = c(55.3846, 54.5385, 54.1538, 54.8205, 54.7692, 54.7179)
y = c(47.1795, 47.0256, 47.4872, 47.4103, 47.3333, 47.8718)
df = data.frame(x,y)
# create function to create summary statistics
xy_stats <- function(data) {
x_mean <- mean(data$x)
y_mean <- mean(data$y)
x_sd <- sd(data$x)
y_sd <- sd(data$y)
corr <- cor(data$x,data$y, method = "pearson")
xydata <- data.frame(x_mean, y_mean, x_sd, y_sd, corr)
return(xydata)
}
# test function on data frame
df_results <- xy_stats(df)
Это приводит к выводу:
> xy_stats(df)
x_mean y_mean x_sd y_sd corr
1 54.73075 47.38462 0.4017586 0.2905615 -0.2230826
Затем я создаю ожидаемый вывод:
# create test data (expected output)
test_data <- c(
"x_mean" = 54.26,
"y_mean" = 47.83,
"x_sd" = 0.46,
"y_sd" = 0.29,
"corr" = -0.265
)
Что выглядит следующим образом:
> test_data
x_mean y_mean x_sd y_sd corr
54.260 47.830 0.460 0.290 -0.265
Затем я сравниваю вывод функции и ожидаемый вывод:
library(testthat)
expect_equal(df_results,test_data,tolerance=1)
Вывод выглядит следующим образом:
Error: `df_results` not equal to `test_data`.
Modes: list, numeric
Attributes: < names for target but not for current >
Attributes: < Length mismatch: comparison on first 0 components >
Я не могу настроить ожидаемые результаты (test_data), но я могу настроить функцию для создания вывода, соответствующего ожидаемым результатам. Я вижу, что класс test_data - это цифра c, а класс результатов df - data.frame, но я не знаю, как получить результаты, полученные с помощью функции, для нумерации c. Я попытался заменить следующее в коде, но это не работает:
# Replace:
xydata <- data.frame(x_mean, y_mean, x_sd, y_sd, corr)
# with:
xydata <- data.frame(as.numeric(x_mean, y_mean, x_sd, y_sd, corr))