我对R循环有一般性的一般问题: 有人可以解释一下这个错误吗?
for (i in seq(length=2:ncol(df))) { z <- cor.test(df$SEASON, df[,i], method="spearman");z}
很容易我想在名为SEASON的col与我的数据框“df”的所有col之间使用cor.test(x,y)函数。 此外,我希望在这个计算之后,R打印出结果“z”。
答案 0 :(得分:1)
首先,您并不需要for()
循环。您可以使用apply()
函数获取SEASON
与数据框df
的所有其他列的相关性。
# some fake data
n <- 20
df <- data.frame(SEASON=runif(n), A=runif(n), B=runif(n), C=runif(n))
# print the correlation
apply(df[, -1], 2, cor.test, df$SEASON, method="spearman")
其次,您没有正确使用seq()
功能。 length.out
的{{1}}参数是&#34; 所需的序列长度&#34;。你继续用向量提供seq()
参数,而不是它期望的标量(长度为1的向量)。这就是您提交length.out
之类的内容时收到警告消息的原因。该函数只使用第一个元素,因此结果与seq(length.out=2:ncol(df))
的结果相同(没有警告消息)。如果您想使用seq(length.out=2)
为您提供所需的结果,请使用seq()
。这很好,但我认为简单而简洁地使用seq(from=2, to=ncol(df))
就像之前的海报所说的那样。
如果你真的想使用for循环,这应该可以解决问题:
2:ncol(df)