Здесь sd
возвращает одно значение, и, поскольку apply
соответствует MARGIN = 2
i, e по столбцу, мы получаем имя vector
.Таким образом, names(out)
получит names
вместо row.names
.Используя воспроизводимый пример со встроенным набором данных iris
data(iris)
out <- apply(iris[1:4], 2, sd, na.rm = TRUE)
names(out)
#[1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
Также, обернув вывод apply
с data.frame
, мы можем использовать row.names
out1 <- data.frame(val = out)
row.names(out1)
#[1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
Если нам нужен data.frame
в качестве вывода, он может быть непосредственно создан с помощью data.frame
call
data.frame(names = names(out), values = out)
Кроме того, это может быть сделано в tidyverse
library(dplyr)
library(tidyr)
iris %>%
summarise_if(is.numeric, sd, na.rm = TRUE) %>%
gather
# key value
#1 Sepal.Length 0.8280661
#2 Sepal.Width 0.4358663
#3 Petal.Length 1.7652982
#4 Petal.Width 0.7622377
или преобразовать в list
и enframe
library(tibble)
iris %>%
summarise_if(is.numeric, sd, na.rm = TRUE) %>%
as.list %>%
enframe