Почему я должен писать означает [я], а не только значит. Я не из программирования - PullRequest
0 голосов
/ 01 ноября 2019

Почему я должен использовать средства [i], а не только средства для сохранения результата, и когда я это делаю, он показывает мне другое значение.

mymeans <- function(x){

    means <- numeric(ncol(x))

    for (i in 1:ncol(x)){

        means[i] <- mean(x[,i])
    }
    return(means[i])
}

1 Ответ

0 голосов
/ 01 ноября 2019

Внутри вашей функции вы используете квадратные скобки для ссылки на индекс (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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...