Я пытаюсь повторить сложный синтаксис для набора переменных. По сути, используя набор данных, например:
df <- data.frame( X=1:10, Y=6:15, Z=11:20)
Я хотел бы заменить синтаксис, например:
mean(df$X)
mean(df$Y)
mean(df$Z)
с петлей вроде:
for (n in c("X", "Y", "Z")) {mean(df$n)}
Однако это скорее Stata-подобное программирование не работает в R. Кажется, что цикл записывает df$"X" вместо df$X. Есть ли простой способ решения проблемы?
ОБНОВЛЕНИЕ: вместо вычисления среднего у меня есть более сложная функция, в которой мне постоянно нужно обращаться к именам переменных. Поэтому мой вопрос касается не вычислительных средств, а использования функции цикла.





Вы можете использовать summarise_at вместе с bind_cols.
В приведенном ниже коде я применил mean к столбцу X, Y и max к столбцу Y, Z. Точно так же вы можете применить свою собственную функцию к нескольким наборам разных столбцов.
library(dplyr)
df %>%
summarise_at(vars(X, Y), funs(Mean = mean)) %>%
bind_cols(df %>%
summarise_at(vars(Y, Z), funs(Max = max)))
который дает
X_Mean Y_Mean Y_Max Z_Max
1 5.5 10.5 15 20
Пример данных:
df <- structure(list(X = 1:10, Y = 6:15, Z = 11:20), .Names = c("X",
"Y", "Z"), row.names = c(NA, -10L), class = "data.frame")
Спасибо, dplyr - хорошая подсказка для вычисления статистики. Однако моя проблема связана с циклом for (см. ОБНОВЛЕНИЕ).
Это делает свою работу.
for(n in c("X", "Y", "Z")) {mean(df[, n])}
Чтобы увидеть результат, оберните mean в print():
# [1] 5.5
# [1] 10.5
# [1] 15.5
Я бы по-прежнему предпочел решение @ Prem, но тогда я не знаю, что вы делаете ...
Спасибо!!! Этот альтернативный способ доступа к столбцу данных решает мою проблему.
Как насчет
sapply(df,mean)?