繁体   English   中英

R:从循环填充矩阵

[英]R: Populating matrix from loop

我有一个非常类似于此的问题: 在循环中在R中填充数据帧 我似乎无法循环填充矩阵。

myDF <- read.csv('corpusFiltered.txt.gz', header = TRUE, sep = '\t')
phylum = sort(unique(myDF$PHYLUM))
myDF.mean = ddply(myDF, .(ENVIRONMENT, FILENAME, PHYLUM), summarize, MeanX = mean(X, na.rm=TRUE) ) 

df_all = myDF.mean[c(4, 3)] #select only the X and Phylum
c_all = unstack(df_all) #restructure dataframe

columnPhylum1 = matrix(ncol=1, nrow=length(phylum))

GET_X = function(dataset)
{
   for (i in 1:length(phylum))
   {   
      print(phylum[i]) 
      columnPhylum1[i,] <- phylum[i] #this does not populate the matrix. still 'NA'
   }   
}
GET_X(c_all)
print('')
print(columnPhylum1)

这是行不通的。 输出为:

[1] Actinobacteria
Levels: Actinobacteria Bacteroidetes Chlamydiae Crenarchaeota Deinococcus-Thermus Euryarchaeota Firmicutes Proteobacteria Spirochaetes Tenericutes ***
[1] Bacteroidetes
[1] Chlamydiae
[1] Crenarchaeota
[1] Deinococcus-Thermus
[1] Euryarchaeota
[1] Firmicutes
[1] Proteobacteria
[1] Spirochaetes
[1] Tenericutes
[1] ""
      [,1]
 [1,]   NA  
 [2,]   NA  
 [3,]   NA  
 [4,]   NA  
 [5,]   NA  
 [6,]   NA  
 [7,]   NA  
 [8,]   NA  
 [9,]   NA  
[10,]   NA 

***为了简洁起见,我从第一个原核生物(放线菌)中删除了所有子序列“级别”信息。

但是,如果我做一个人造矩阵...

sig= matrix(ncol=1, nrow=length(phylum))
for (i in 1:length(phylum)){sig[i,]<-i}
print(sig)

这就像一个魅力。

     [,1]
 [1,]    1   
 [2,]    2   
 [3,]    3   
 [4,]    4   
 [5,]    5   
 [6,]    6   
 [7,]    7   
 [8,]    8   
 [9,]    9   
[10,]   10  

也许我看不见森林为树; 我检查了明显的东西(例如正确的变量名),但无法找到任何问题。 我可以看到的唯一区别是,顶层从函数调用了循环。 我不明白为什么我会从“相同”的代码中得到不同的行为。 非常感谢您的协助。

我猜问题是您正在尝试在数字矩阵中复制因子变量的值(这就是您的“伪”矩阵起作用的原因,因为它是在插入数字而不是因子)。 我真的不明白为什么要在矩阵中使用它,因为您尝试复制已经拥有的整个矢量。 无论如何,也许这个简单的代码就是您真正想做的:

vect <- factor(c('foo', 'bar', 'foo'), levels = c('foo', 'bar'))
mat <- as.matrix(vect)
mat

输出:

    [,1] 
[1,] "foo"
[2,] "bar"
[3,] "foo"

编辑:在您的特定情况下,这将转换为:

columnPhylum1 <- as.matrix(phylum)

这可能与您的phyla载体包含因子有关。

尝试将phyla强制为字符向量:

char_phyla <- as.character(phyla)

如果可行,您可以在不自动分解的情况下读取csv数据:

myDF <- read.csv('corpusFiltered.txt.gz', header=T, sep='\t', stringsAsFactors=F)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM