2016-11-04 1 views
0

Простите меня, если моя формулировка этого вопроса не идеальна. Я новичок в переполнении стека и новичком в R. Я работаю с несколькими файлами .txt - по одному для каждого участника. Каждый файл имеет имя с номером субъекта (например, «015.txt») и содержит столбцы X, Y и время. У меня есть код для расчета и создания столбцов данных для ведущих оценок, разностных оценок и скорости изменения одного файла за раз, а затем сохранения этого файла (например, как «015LDscores.txt»).R для цикла для функций слайдов для каждого из нескольких текстовых файлов

setwd("/Users") #Set directory 
my.data<-read.table(file.choose(),header=T,sep="\t") 

#Lead scores for X and Y 
require(DataCombine) 
LeadX<-slide(my.data, Var="X", slideBy=-1) 
LeadXY<-slide(LeadX, Var="Y", slideBy=-1) 
LeadXY<-na.omit(LeadY) #Delete the first row of null lead values 

#Difference scores for X and Y 
LeadXY$DiffX<-(LeadXY$"X-1"-LeadY$"X") 
LeadXY$DiffY<-(LeadXY$"Y-1"-LeadY$"Y") 

#Rate of Change for X 
LeadXY<-slide(LeadXY, Var="X", slideBy=1) #Create column of lagged X scores (X1) 
write.table(LeadXY,"/Users/mstoehr/015LDscores.txt",sep="\t") #Save 
LeadXY$velocityX<-(LeadXY$"X1"-LeadY$"X-1")/2 #Calculate rate of change of X 
write.table(LeadY,"/Users/mstoehr/015LDscores.txt",sep="\t") #Save 

Я хочу, чтобы интегрировать для цикла, который говорит R, чтобы сделать это для всех текстовых файлов (сохраненных в соответствии с шаблоном «* .txt») в указанном каталоге. Вот какой-то отдельный код для цикла for.

setwd("/Users") 
subjectFiles <- list.files() 
for(i in 1:length(subjectFiles)){ 
#subject calculations} 

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

ответ

0

Вы можете использовать list.files, чтобы вытаскивать файлы только с этим рисунком, а затем извлекать номер пациента для использования при сохранении результатов. Что-то вроде этого должно работать, если текстовые файлы находятся в рабочем каталоге, и вы хотите вытащить все .txt-файлы в этом каталоге.

subjectFiles <- list.files(pattern = '*.txt') 
for (this_file in subjectFiles) { 
    ID <- gsub('.txt', '', this_file) 

    my.data <- read.table(this_file, header = T, sep = "\t") 

    #Lead scores for X and Y 
    require(DataCombine) 
    LeadX<-slide(my.data, Var="X", slideBy=-1) 
    LeadXY<-slide(LeadX, Var="Y", slideBy=-1) 
    LeadXY<-na.omit(LeadY) #Delete the first row of null lead values 

    #Difference scores for X and Y 
    LeadXY$DiffX<-(LeadXY$"X-1"-LeadY$"X") 
    LeadXY$DiffY<-(LeadXY$"Y-1"-LeadY$"Y") 

    #Rate of Change for X 
    LeadXY<-slide(LeadXY, Var="X", slideBy=1) #Create column of lagged X scores (X1) 
    write.table(LeadXY, paste0("/Users/mstoehr/", ID, "LDscores.txt"),sep="\t") #Save 
    LeadXY$velocityX<-(LeadXY$"X1"-LeadY$"X-1")/2 #Calculate rate of change of X 
    write.table(LeadY, paste0("/Users/mstoehr/", ID, "LDscores.txt"),sep="\t") #Save 

} 
+0

Хорошо, спасибо. Я пробовал этот код, и он вытягивает все текстовые файлы в каталоге, но не сохраняет новые столбцы переменных, и я получаю сообщение об ошибке «Ошибка: неожиданно»} в: "}" – M21

+0

К сожалению,) в последнем вызове 'paste'. Попробуйте это – Craig

+0

Это похоже на работу. Спасибо Крейг! – M21