Простой R для цикла не выполняется - PullRequest
0 голосов
/ 13 декабря 2018

это должно быть легко, это должен быть синтаксис, но я везде искал ранее опубликованное решение.Просто пытаюсь уменьшить регистр имен переменных в таблицах, используя цикл.

Команда colnames работает без "for":

colnames(case) <- tolower(colnames(case)) 

Цикл for работает без имен:

tablen<-c("account","case") 
for(x in tablen) {
print(x)
}

Но в сочетании

tablen<-c("account","case") 
for(x in tablen) {
  colnames(x) <- tolower(colnames(x))
}

Возвращает:

Error in `colnames<-`(`*tmp*`, value = tolower(colnames(x))) : 
attempt to set 'colnames' on an object with less than two dimensions

Любая помощь приветствуется!

Спасибо за ответы, но решение, которое я ищу, состоит в том, чтобы заставить команду:

 colnames(case) <- tolower(colnames(case)) 

работать с использованием цикла for.В этом примере текст «case» относится к data.frame.Приведенная выше команда, когда она не находится в цикле for, изменяет имена переменных case data.frame на строчные.Предложение создать новый список имен переменных case и понижение их с помощью цикла for работает, но не позволяет достичь желаемой цели, чтобы приведенная выше команда работала, ссылаясь непосредственно на data.frame (а не на имена переменных в таблице).Кажется, что команда colnames просто не примет оператор, как я в (я в таблице).

1 Ответ

0 голосов
/ 13 декабря 2018

Ключевым моментом здесь является то, что case является символом, который относится к data.frame (или матрице, возможно).Ваша ошибка в том, что вы думаете, что символьный объект "case" также относится к data.frame / matrix, обозначенному case.Это не.

Например,

x <- 2

присвоил номер 2 объекту x.Но "x" это просто символьная буква x и не имеет никакого отношения к объекту, который я только что определил.Вероятно, вы хотите поместить свои объекты в список:

my_list <- list(account,case) # Note the lack of double quotes!

и затем выполнить цикл по my_list:

for (i in seq_along(my_list)){
  colnames(my_list[[i]]) <- tolower(colnames(my_list[[i]]))
}

Конкретный пример:

l <- list(mtcars,mtcars)
head(l[[1]])
for (i in seq_along(l)){ 
  colnames(l[[i]]) <- toupper(colnames(l[[i]]))
}
head(l[[1]])
head(l[[2]])

Люди неизбежно будут появляться в комментариях и ответах, предлагая вам «обманывать» и использовать такие функции, как get.Не слушайте их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...