Как присвоить имя фреймам данных в цикле for? В R

Для маленькой «x» простой петли ваш друг. Для больших «х» и относительно короткой «str» мы можем думать о «более умном» решении, повторно используя уже конкатенированную строку.

std::string MakeDuplicate( const std::string& str, unsigned int x ) {

  std::string newstr;
  if (x>0) {
    unsigned int y = 2;
    newstr.reserve(str.length()*x);  
    newstr.append(str);
    while (y<x) {
      newstr.append(newstr);
      y*=2;
    }
    newstr.append(newstr.c_str(), (x-y/2)*str.length());
  }
  return newstr;
}

Или что-то в этом роде: o) (я думаю, что это может быть написано красивее, но идея есть).

EDIT: я был заинтересован в себе и сделал некоторые тесты, сравнивающие три решения на моем ноутбуке с визуальной студией (вариант повторного использования, простой цикл с предварительным распределением, простая копия и цикл-1 без предварительного использования). Ожидаемые результаты: для небольшой версии преалокации x (& lt; 10), как правило, самая быстрая, преалокация не была минимальной бит медленнее, поскольку большая скорость ускорения версии «повторного использования» действительно значительна (сложность log n vs n). Ничего, я просто не могу думать о какой-либо реальной проблеме, которая могла бы ее использовать: o)

-1
задан Bodil Jørgensen 18 January 2019 в 14:06
поделиться

1 ответ

Альтернативный подход к @ user2974951 заключается в сохранении всех файлов в списке с именем dataFiles.

name<-c("A", "B", "C", "D", "E", "F","G","H","I","J")
file<-c("A.txt", "B.txt", "C.txt", "D.txt", "E.txt",        
        "F.txt","G.txt","H.txt","I.txt","J.txt")

dataFiles = list()
for(i in 1:length(file)) {
  dataFiles[[LETTERS[i]]] = read.table(file[i],sep="\t",header=TRUE)
}

> names(dataFiles)
 [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J"

Я здесь использую БУКВЫ для присвоения имен, но вполне может быть:

name[i]
0
ответ дан KnightofniDK 18 January 2019 в 14:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: