在R中,如何使用一个表,在另一个表中定义用于双向方差分析的列?
我有两张桌子,m和epi。epi表包含m个列的名称在R中,如何使用一个表,在另一个表中定义用于双向方差分析的列?,r,R,我有两张桌子,m和epi。epi表包含m个列的名称 head(m[,1:6]) Geno 11DPW 8266 80647 146207 146227 1 SB002XSB012 0.87181895 G/G C/C G/G A/A 2 SB002XSB018 Na G/G C/T G/G A
head(m[,1:6])
Geno 11DPW 8266 80647 146207 146227
1 SB002XSB012 0.87181895 G/G C/C G/G A/A
2 SB002XSB018 Na G/G C/T G/G A/A
3 SB002XSB044 1.057744 G/G C/C G/G A/A
4 SB002XSB051 1.64736814 G/G C/C G/G A/A
5 SB002XSB067 0.69987475 A/G C/C G/G A/G
6 SB002XSB073 0.60552177 A/G C/C G/G A/G
> dim(m)
[1] 167 28234
and
head(epi)
SNP1 SNP2
1 7789543 12846898
2 12846898 7789543
3 24862913 4603896
4 4603896 24862913
5 50592569 7789543
6 27293494 57162585
dim(epi)
[1] 561 2
我想取每一行epi,并在11DPW的m中对这两列进行双向方差分析。
我试过了
f我怀疑您在epi
中的值是数字,但您要使用的是它们的字符等价物,因为m
中的列名是字符串(即使这些字符串由数字组成)。请尝试以下方法:
m[[as.character(epi[x,])]]
(etc)
[[
运算符很奇怪,但很酷。我怀疑您在epi
中的值是数字,但您要使用的是它们的字符等价物,因为m
中的列名是字符串(即使这些字符串是由数字组成的)。请尝试以下方法:
m[[as.character(epi[x,])]]
(etc)
[[
运算符很奇怪,但很酷。暂时不考虑使用整数作为列名的复杂性(即,假设此问题得到正确处理)
如果epi
中指示的列不存在于m
这是第一部分。第二,我们需要将整数作为列名处理。非常重要:如果使用m[,7823],这将得到m的第7823列。您必须确保将整数转换为字符串,这表明您需要名为“7823”的列,而不是(必要的)第7823列
将用作.character
用于此:
m[, as.character(x[[1]])]
把它们放在一起
有问题的元素暂时把使用整数作为列名带来的复杂性放在一边(也就是说,假设这个问题得到了正确处理)
如果epi
中指示的列不存在于m
这是第一部分。第二,我们需要将整数作为列名处理。非常重要:如果使用m[,7823],这将得到m的第7823列。您必须确保将整数转换为字符串,这表明您需要名为“7823”的列,而不是(必要的)第7823列
将用作.character
用于此:
m[, as.character(x[[1]])]
把它们放在一起
有问题的元素使用as.formula
从字符串创建lm
的公式,您可以使用paste
进行组装。使用as.formula
从字符串创建lm
的公式,您可以使用paste
进行组装。谢谢,R标识m[(epi[1,1])],但当我将其放入函数中时,如下所示:f您的函数f
是否独立工作?仅尝试将f
与您的apply
调用分离,您可能会告诉apply
对epi
行中的值进行操作,但您的函数f
需要矩阵epi
作为输入。Thanks,R识别m[[(epi[1,1])],但当我将其放入函数中时,如下所示:f您的函数f
是否自行工作?仅尝试将f
与您的apply
调用分开,您可能会告诉apply
对epi
行中的值进行操作,但您的函数f
需要矩阵epi
作为输入。
Instead of epi[x, 1] and epi[x, 2]
You want to use x[[1]] and x[[2]]
m[, as.character(x[[1]])]
offendingElements <- !sapply(epi, "%in%", colnames(m))
offendingRows <- which(offendingElements) %% nrow(epi)
apply(epi[-offendingRows, ], 1, function (x)
anova( lm ( as.numeric(m$"11DPW") ~ m[, as.character(x[[1]]) ] * m[, as.character(x[[2]]) ] ))
)
# clean up the elements in epi
epi.clean <- sapply(epi, make.names)
# clean up m's column names
colnames(m) <- make.names(colnames(m))
# use epi.clean in your apply statement. Dont forget offendingRows
apply(epi.clean[-offendingRows, ], 1, function (x)
anova( lm ( as.numeric(m$"11DPW") ~ m[, x[[1]] ] * m[, x[[2]] ] ))
)