For循环并将变量名称视为R中的字符串

时间:2017-03-30 07:59:14

标签: r

我想在R中创建一个for循环,但是它应该依赖于17个变量中的最后一个字母,而且我很难找到如何使该函数将变量名称视为字符串。

我现在的代码:

fisher.test(table( data.family$proband.unrelated, data.family$q_81_SQ00a)) 
fisher.test(table( data.family$proband.unrelated, data.family$q_81_SQ00b)) 
fisher.test(table( data.family$proband.unrelated, data.family$q_81_SQ00c)) 

正如你所看到的,我只是继续重复从字母a到r的每个变量的代码,所以我想创建一个for循环,它可以将变量q_81_SQ00a的最后一个字母改为字母a-r。

for (i in c('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r')) {

  fisher.test(data.family$proband.unrelated, data.family$q_81_SQ00'i'))  

}

我收到了警告"意外的符号"代码中的几个地方。 提前致谢!

2 个答案:

答案 0 :(得分:1)

您必须将字母粘贴到变量名称以获取字符串,然后使用[]运算符选择所需的变量。 另一个提示:R中的letters常量包含从a到z的字母。

这是一个解决方案:

for (i in letters[1:18]) {
  fisher.test(data.family["proband.unrelated"],
              data.family[paste0("q_81_SQ00", i)])  
}

答案 1 :(得分:0)

根据评论,似乎你在一些Fisher测试中遇到了一些麻烦。要查看哪些是对错,您可以在Fisher测试周围添加try函数。

lapply(letters[1:18], function(x){
    try(fisher.test(table(data.family$proband.unrelated,
                data.family[[paste0("q_81_SQ00", x)]])))
})