【问题标题】:Iteration in R for different filesR中针对不同文件的迭代
【发布时间】:2021-05-12 06:23:47
【问题描述】:

我需要一些对我来说有点困难但对于 R 专家程序员来说很容易的东西。我需要使用数据框中包含的信息来迭代我的脚本。 数据框类似于

   pdb       range
1 1a7s_A     78:81
2 1b9o_A     50:53
3 1b9o_A    99:102
4 1bkr_A     27:30
5 1c0p_A 1179:1182
6 1c75_A     42:45

我需要为每一行迭代我的脚本

 pdb <- read.pdb("1a7s_A.pdb") ## here I need to read my pdb file 
    pdb <- atom.select(pdb, resno = 78:81, verbose = T, value = T) ## here I have to put the value in range col

... #my script instruction

table <- data.frame("pdb" = "1a7s_A", ## here I have to insert the name file again 
                    "res" = "78:81",  ## here the range 
                    "omega2" = omega2, "phi2" = phi2,  "psi2" = psi2,
                    "omega3" = omega3, "phi3" = phi3, "psi3" = psi3)

最后,我需要一个包含每个文件迭代的所有信息的 df。

我确定我会将包含所有要读取的文件的目录设置为工作目录。谢谢!

【问题讨论】:

    标签: r dataframe loops iteration


    【解决方案1】:

    首先,创建一个类似的读取函数

    readTableFromRange <- function(tableName,rangeString) {
      filename <- paste0(tableName,".pdb") #get the filename by appendong the pdb-ending
      pdb <- read.pdb(filename)
      rangeNumeric <- eval(parse(text=rangeString)) #getting the range as a numeric vector by evaluating the string as a r-command
      pdb <- atom.select(pdb, resno = rangeNumeric, verbose = T, value = T)
      
      #Enter your script here...
      
      return(data.frame("pdb" = tableName,
                        "res" = rangeString,  
                        "omega2" = omega2, "phi2" = phi2,  "psi2" = psi2,
                        "omega3" = omega3, "phi3" = phi3, "psi3" = psi3))
    }
    
    

    知道你的数据框被称为pa,你可以像这样应用这个函数

    tableList <- Map(readTableFromRange,pa$pdb,pa$range)
    

    获取表格列表,最后您可以将它们全部绑定在一起

    do.call("rbind",tableList )
    

    【讨论】:

    • 我不知道为什么,但它似乎不起作用,因为我没有收到错误,但我的环境中没有任何东西
    • 包含要读取的信息的df称为“pa”。知道我的 df 名称,你能这么温柔地编辑你的分析器吗?
    • 改变了我的答案。它必须在Map 的调用中完成。在您的问题中,您写了... #my script instruction。这必须出现在我的功能中,您可以在其中找到#Enter your script here...。它应该是采用pdb 并计算omega2,omega3,phi2,phi3,psi2,psi3 的东西。
    • 我可以从 read.pdb 开始查看它是否有效,这就是我没有放置以下命令的原因。所以我对你的回答只需要复制并运行它?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多