【发布时间】:2017-06-18 04:01:21
【问题描述】:
我确信对此有一个简单的答案,但我似乎找不到正确的代码。我有一个文件列表和一个字符串列表,我想将这些文件的内容分配给数据框。然后我想在同一个循环中对数据帧执行其他操作。我还需要为下游工作保留每个数据框。这是我的代码:
samples <- c('fc14','g14','fc18','g18','fc21','g21')
fc_samples <- grep("fc", samples, value=TRUE)
fc_files <- c('fc14_g14_full_annot_uniq.txt','fc18_g18_full_annot_uniq.txt','fc21_g21_full_annot_uniq.txt')
# make dataframes
for (file in fc_files)
{ fc_n <- 1
g_n <- 1
print(file);
# THE BIT THAT DOESN'T WORK
assign(paste("data", fc_samples[fc_n], sep='_'), read.table(file,sep = "\t", header=T));
# HERE I EXPECT THE TOP OF MY DF TO BE PRINTED BUT IT ISN'T
head(data_fc14);
# I TRY THIS INSTEAD
do.call("<-",list(paste("data", fc_samples[fc_n], sep='_'), read.table(file,sep = "\t", header=T)))
# I TRY TO PRINT THE DF AGAIN BUT STILL NO LUCK
head(paste("data", fc_samples[fc_n], sep='_'))
# FIRST DOWNSTREAM THING I WOULD LIKE TO DO,
# WON'T WORK UNTIL I SOLVE THE DF ASSIGNMENT ISSUE
names(paste("data", fc_samples[fc_n], sep='_'))[names(paste("data", fc_samples[fc_n], sep='_'))==c('SAMPLE_fc','CHROM_fc','START_fc','REF_fc','ALT_fc','REGION_fc','DP_fc','FREQ_fc','GENE_fc','AFFECTS_fc','dbSNP_fc',
# 'NOVEL_fc')] <- c('SAMPLE','CHROM','START','REF','ALT','REGION','DP','FREQ','GENE','AFFECTS','dbSNP','NOVEL')
# ITERATE TO THE NEXT FILE
fc_n <- fc_n+1
}
【问题讨论】:
-
循环执行
head不会打印到控制台。你必须明确地print它。 -
只是没有打印,还是没有创建对象?
-
感谢您的回复,所以我在 head 语句周围添加了一个打印语句,现在它打印了我期望的内容,但是我无法在循环中的过程中引用该对象。我收到此错误:名称错误(粘贴(“数据”,fc_samples [fc_n],sep =“_”))[名称(粘贴(“数据”,:分配目标扩展到非语言对象
-
基本上我需要一个解决方案来引用作为循环的一部分创建的对象,而不涉及直接调用它'data_fc14'
-
fc_n <- 1应该在循环之外。你的assign()似乎对我有用。我想你要找的是get("data_fc_14")。虽然它不适用于names(get("data_fc_14")) <- ...表达式的左侧。你必须复制它,修改它的名字,然后重新影响它。