Я пытаюсь суммировать столбцы набора данных iris по классам столбцов.Я попытался использовать split
в списке классов столбцов:
col.cl = lapply(iris, class)
split(names(col.cl), unlist(col.cl))
Это дает что-то близкое к желаемому результату вместе с предупреждением:
Warning message:
In split.default(names(col.cl), unlist(col.cl)) :
data length is not a multiple of split variable
$`factor`
[1] "Sepal.Length"
$numeric
[1] "Sepal.Width" "Petal.Length" "Petal.Width"
$ordered
[1] "Species"
Что связано сстолбец Species
имеет два класса: ordered
и factor
(поэтому имена (столбец) имеет длину 5, а переменная разбиения (класс столбец) имеет длину 6).Использование split(rep(names(col.cl), sapply(col.cl, length)), unlist(col.cl))
устраняет несоответствие длин и избавляет от предупреждения, но мне было интересно, есть ли более краткий способ достижения того же результата, который не требует rep
?