Внутри вашей функции вы используете квадратные скобки для ссылки на индекс (i
) в вашем векторе means
. Без этого вы будете возвращать только среднее значение последнего столбца.
Для начала, вот ваша функция, работающая с некоторыми примерами данных:
# Create an example set of data
randomValues <- data.frame("A"=rnorm(100, mean=0), "B"=rnorm(100, mean=5), "C"=rnorm(100, mean=500))
# Create a function to calculate the mean value of each column
meanOfEachColumn <- function(dataframe){
# Initialise a vector to store the calculated means
means <- numeric(length=ncol(dataframe))
# Examine each column in the dataframe
for(column in 1:ncol(dataframe)){
means[column] <- mean(dataframe[, column])
}
return(means)
}
# Calculate the mean of each column
meansOfColumns <- meanOfEachColumn(randomValues)
print(meansOfColumns)
0.04983223 4.93306557 500.21016834
means[column]
в приведенном выше коде означает, что среднеекаждого столбца хранится в этой позиции в векторе, который возвращается.
Без него вы получите следующее:
# Create a function to calculate the mean value of each column
meanOfEachColumn <- function(dataframe){
# Initialise a vector to store the calculated means
means <- numeric(length=ncol(dataframe))
# Examine each column in the dataframe
for(column in 1:ncol(dataframe)){
means <- mean(dataframe[, column])
}
return(means)
}
# Calculate the mean of each column
meansOfColumns <- meanOfEachColumn(randomValues)
print(meansOfColumns)
500.2101
Что вы заметитесреднее значение последнего столбца в примере кадра данных randomValues
. Это означает, что вектор средних значений (means
) был заменен на среднее значение последнего столбца в кадре данных.
Кроме того, в качестве общего замечания вы должны попытаться привести воспроизводимый пример рядом с вашим вопросом. См. post для более подробной информации.
Наконец, в R есть функция, которая уже вычисляет среднее значение каждого столбца в кадре данных:
meansOfColumns <- colMeans(randomValues)