Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为每个字母指定数字,以便r计算单词中字母的总和_R - Fatal编程技术网

为每个字母指定数字,以便r计算单词中字母的总和

为每个字母指定数字,以便r计算单词中字母的总和,r,R,我正在尝试在R中创建一个工具,该工具将计算以单字母氨基酸代码输入的肽链的原子组成(即碳、氢、氮和氧原子数)。例如,肽KGHLY由氨基酸赖氨酸(K)、甘氨酸(G)、组氨酸(H)、亮氨酸(L)和酪氨酸(Y)组成。赖氨酸由6个碳、13个氢、1个氮和2个氧组成。甘氨酸由2个碳、5个氢、1个氮和2个氧组成。等等等等。 我希望r代码可以从数据帧读取肽字符串(KGHLY),或者使用readline()从键盘获取输入 我对R和编程都是新手。我能够为每种氨基酸制作对象,例如,g这里有两个主要的组成部分需要注意:选

我正在尝试在R中创建一个工具,该工具将计算以单字母氨基酸代码输入的肽链的原子组成(即碳、氢、氮和氧原子数)。例如,肽KGHLY由氨基酸赖氨酸(K)、甘氨酸(G)、组氨酸(H)、亮氨酸(L)和酪氨酸(Y)组成。赖氨酸由6个碳、13个氢、1个氮和2个氧组成。甘氨酸由2个碳、5个氢、1个氮和2个氧组成。等等等等。 我希望r代码可以从数据帧读取肽字符串(KGHLY),或者使用readline()从键盘获取输入
我对R和编程都是新手。我能够为每种氨基酸制作对象,例如,g这里有两个主要的组成部分需要注意:选择 一种基本数据的存储方法及其算法 计算您想要的结果

对于计算,最好有您的数据 由于R循环使用较短向量的方式,存储在矩阵中 当两个向量相乘时。如果你愿意,这种循环利用也会起作用 要将矩阵与向量相乘,因为矩阵是 具有一些附加属性(即维度)的向量 和维度名称)。考虑下面的例子来看看它是如何实现的 工作

将此类信息存储在数据库中通常是一种“痛苦” 矩阵,因为更新 稍后的信息。然而,我想这并不是经常发生的 需要添加新的氨基酸,所以这可能不是一个问题 这个案子

让我们为所需的五种氨基酸创建一个矩阵 对于你在例子中提到的肽。数字是 在维基百科上找到的,希望我在复制时没有搞砸 他们。只需照做添加所有其他氨基酸

amino_acids <- rbind(
    G = c(C = 2, H = 5,  N = 1, O = 2),
    L = c(C = 6, H = 13, N = 1, O = 2),
    H = c(C = 6, H = 9,  N = 3, O = 2),
    K = c(C = 6, H = 14, N = 2, O = 2),
    Y = c(C = 9, H = 11, N = 1, O = 3))

amino_acids
  C  H N O
G 2  5 1 2
L 6 13 1 2
H 6  9 3 2
K 6 14 2 2
Y 9 11 1 3
使用
肽2
进行分析

table(peptide_2)
peptide_2
G H K L Y 
1 1 1 1 1 
因此,这可用于定义一个向量,以在第一个示例中扮演
test\u vec
的角色。然而,一般而言,结果载体包含的成分将少于基质
氨基酸的行
;因此,必须首先执行一个限制,以获得我们希望用于计算的正确格式

有几个选项可用,最简单的一个可能是使用表中的名称从
氨基酸
中子集所需的行,这样计算就可以进行,而无需任何进一步的模糊

peptide_vec <- table(peptide_2)

colSums(amino_acids[names(peptide_vec), ] * as.vector(peptide_vec))
 C  H  N  O 
29 52  8 11
接下来呢?这取决于你是如何储存你的 肽,以及你想对结果做什么。如果为了 例如,您将肽存储在载体中,并希望 若要将结果存储在矩阵中,则可能 可以使用下面给出的
vapply

data_vector <- c("GHKLY", "GGLY", "HKLGL")

result <- t(vapply(
    X = data_vector,
    FUN = peptide_function,
    FUN.VALUE = numeric(4),
    amino_acids = amino_acids))

result
       C  H N  O
GHKLY 29 52 8 11
GGLY  19 34 4  9
HKLGL 26 54 8 10

data\u向量拆分字符串(使用
strplit
),然后使用
匹配
。如果你想要答案中的代码,你需要制作一个小的、可复制的、说明性的例子。如果你使用模拟数据或使用
dput()
来共享数据,人们会非常高兴。在这种情况下,有用的是你的输入是如何构造的样本(可能是肽载体和“成本”矩阵”-每种元素数量的氨基酸矩阵);这或多或少就是你在问题中所描述的。
dput
这是你问题中的数据,我想我们可以在一些代码上帮助你哇,非常感谢你给出了这个广泛的答案。我已经通过你的例子,扩展了氨基酸和元素的数量,给出了:data\u vector
peptide <- "KGHLY"

peptide_2 <- unlist(strsplit(x = peptide, split = ""))
peptide_2
[1] "K" "G" "H" "L" "Y"
table(peptide_2)
peptide_2
G H K L Y 
1 1 1 1 1 
peptide_vec <- table(peptide_2)

colSums(amino_acids[names(peptide_vec), ] * as.vector(peptide_vec))
 C  H  N  O 
29 52  8 11
peptide_function <- function(peptide, amino_acids) {
    peptide_vec <- table(
        unlist(strsplit(x = peptide, split = "")))
    ## Compute the result and return it to the work flow.
    colSums(
        amino_acids[names(peptide_vec), ] *
        as.vector(peptide_vec))
}
peptide_function(peptide = "GHKLY",
                 amino_acids = amino_acids)
 C  H  N  O 
29 52  8 11
data_vector <- c("GHKLY", "GGLY", "HKLGL")

result <- t(vapply(
    X = data_vector,
    FUN = peptide_function,
    FUN.VALUE = numeric(4),
    amino_acids = amino_acids))

result
       C  H N  O
GHKLY 29 52 8 11
GGLY  19 34 4  9
HKLGL 26 54 8 10