Из-за ошибки проблема заключается в поведении ?Extract
, которое по умолчанию использует drop = TRUE
. Что происходит, когда мы указываем ,
, он преобразуется из data.frame в vector
, когда есть один столбец. Рассмотрим следующий пример, где только один столбец с «Россией» в именах
df1 <- data.frame(col1 = 1:5, col2 = 6:10)
df1$RussiaCol <- 1:5
rowSums(df1[,grep("Russia", names(df1))], na.rm = TRUE)
Ошибка в строках строк (df1 [, grep ("Россия", имена (df1))], na.rm = TRUE):
'x' должен быть массивом как минимум двух измерений
Теперь давайте проверим проблему
df1[,grep("Russia", names(df1))]
#[1] 1 2 3 4 5
возвращает vector
из-за поведения по умолчанию
df1[,grep("Russia", names(df1)), drop = FALSE]
# RussiaBot
#1 1
#2 2
#3 3
#4 4
#5 5
Или без использования ,
, по умолчанию он принимает индекс в качестве индекса столбца
df1[grep("Russia", names(df1))]
Согласно ?rowSums
x - массив из двух или более измерений, содержащий числовые, комплексные, целые или логические значения или числовой фрейм данных. Для .colSums () и т. Д. Числовая, целочисленная или логическая матрица (или вектор длиной m * n).
Итак, вектор не займет
В list
, если мы удалим ,
, он должен нормально работать
lapply(myfiles3, function(x) {
x$RUSSIA2 <- rowSums(x[grep("Russia", names(x))], na.rm = T)
x})