首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为dataframe创建for循环

为dataframe创建for循环
EN

Stack Overflow用户
提问于 2018-04-30 20:45:59
回答 2查看 76关注 0票数 1

我有一个向量列表

代码语言:javascript
复制
library(seqinr) mydata <- read.fasta(file="mydata.fasta")
mydatavec <- mydata[[1]] 

lst <- split(mydatavec, as.integer(gl(length(mydatavec), 100,length(mydatavec))))

df <- data.frame(matrix(unlist(lst), nrow=2057, byrow=T), stringsAsFactors=FALSE)

现在,df中的每个向量都是100长的,由字母"a“、"c”、"g“、"t”组成。我想计算每个向量的Shannon熵,我将举例说明我的意思:

代码语言:javascript
复制
v1 <- count(df[1,], 1) 
a  c  g  t 
27 26 24 23     

v2 <- v1/sum(v1) 
  a    c    g    t 
0.27 0.26 0.24 0.23 

v3 <- -sum(log(v2)*v2) ; print(v3) 
[1]1.384293

总之,我需要2057个打印值,因为这就是我有多少向量。我在这里的问题是,是否可以创建一个for循环或重复循环来为我执行此操作?我试过了,但这件事我什么也没做。

代码语言:javascript
复制
dput(head(sequence))
structure(c("function (nvec) ", "unlist(lapply(nvec, seq_len))"
), .Dim = c(2L, 1L), .Dimnames = list(c("1", "2"), ""), class = "noquote")

我的尝试:我只想专注于计数函数,并创建了以下内容

代码语言:javascript
复制
A <- matrix(0, 2, 4)

for (i in 1:2) {
  A[i] <- count(df[i,], 1)
}

这个函数所做的是正确地计算第一个向量中"a“的数目,然后跟随到第二个向量。它完全忽略了其余的字母

代码语言:javascript
复制
A
     [,1] [,2] [,3] [,4]
[1,]   27    0    0    0
[2,]   28    0    0    0

此外,我天真地认为,在任何地方添加“我”都会使它发挥作用。

代码语言:javascript
复制
s <- matrix(0, 1, 4)
s1 <- matrix(0, 1, 4)
s2 <- numeric(4)

for (i in 1:2) {
  s[i] <- count(df[i,],1)
  s1[i] <- s[i]/sum(s[i])
  s2[i] <- -sum(log(s1[i])*s1[i])
}

但这也让我无处可寻。

EN

Stack Overflow用户

回答已采纳

发布于 2018-04-30 21:35:17

如果您不需要保存计数,并且只需要打印或保存所显示的计算,则这些操作应该有效:

代码语言:javascript
复制
for(i in 1:dim(df)[1]{
    v1 <- count(df[i,], 1) 
    v2 <- v1/sum(v1) 
    v3 <- sum(log(v2)*v2)
    print(-v3) #for print
    entropy[i] <- v3 #for save the value in a vector, first create this vector

}

您所显示的循环的问题可能是count的输出,它是一个表类,它有1行和4列,并将其分配给矩阵行。另一个可能的问题是,在赋值中-例如,您声明si <- count(dfi,1),何时应该是si,<- count(dfi,1)。

票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50107971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档