【问题标题】:r for loop cor.test functionr for loop cor.test 函数
【发布时间】:2015-07-28 15:16:03
【问题描述】:

我一般对 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”。

【问题讨论】:

  • 看看seq(length=2:5) 的输出应该会给你一个想法。学习help("seq").
  • 另外,试试print(z)
  • 一目了然(但我可能错了)我认为for 部分应该只是( i in 1:ncol(df) )
  • 感谢您的回复.. 我也尝试过 ( i in 1:ncol(df) ).. 但它没有改变任何东西.. print(z) 只给了我一个相关性结果不是全部..
  • 好吧,我得到了结果,希望得到帮助(“seq”)正确的答案是:(i in seq(length.out=2:ncol(df))) 即使我没有得到这就是为什么它应该不同于( i in 2:ncol(df) )

标签: r for-loop


【解决方案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() 函数。 seq()length.out 参数是“期望的序列长度”。您不断为 length.out 参数提供一个向量,而不是它所期望的标量(长度为 1 的向量)。这就是为什么您在提交类似seq(length.out=2:ncol(df)) 的内容时收到警告消息的原因。该函数只使用第一个元素,因此结果与seq(length.out=2) 的结果相同(没有警告消息)。如果您想使用seq() 为您提供所需的结果,您将使用seq(from=2, to=ncol(df))。这很好,但我认为像以前的海报建议的那样简单地使用2:ncol(df) 会更简单、更干净。

如果你真的想使用 for 循环,这应该可以解决问题:

for(i in 2:ncol(df)) cor.test(df$SEASON, df[, i], method="spearman")

【讨论】:

  • 使用 outer(colnames(df[13]),out$AF12$p.value,paste,sep="") "AF12 0.00096268872425193" #其中 AF12 是 col 13 的名称。这适用于所有输出数据...
  • sapply(out, "[[", "p.value")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-17
  • 2016-11-04
  • 2017-08-24
相关资源
最近更新 更多