我想在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'))
}
我收到了警告"意外的符号"代码中的几个地方。 提前致谢!
答案 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)]])))
})