【问题标题】:Running R t.test in nested loops在嵌套循环中运行 R t.test
【发布时间】:2019-03-10 23:22:51
【问题描述】:

我是 R Studio 的新手。对于课堂,我提取了美国人口普查 2016 选举数据集,并希望对数据集运行一系列 T 检验。数据集的一些细节。首先,数据被编码 - 1 到 4 - 代表公民身份。我想看看各种因素是否会影响投票的可能性(1 = 是或 2 = 否)。

代码如下:

factor <- c("Age", "Fathers_country_of_birth", "Mothers_country_of_birth","Highest_level_of_School_completed", "Country_of_birth")
citizen <- c("NATIVE, BORN IN THE UNITED STATES", "NATIVE, BORN IN PUERTO RICO OR OTHER U.S. ISLAND AREAS", "NATIVE, BORN ABROAD OF AMERICAN PARENT OR PARENTS", "FOREIGN BORN, U.S. CITIZEN BY NATURALIZATION")

for (f in factor) {
  print(f)
for (i in 1:4){
  print(paste("Citizenship is", citizen[i] ))
  query <- paste("select * from result2 where Citizenship = ",i)

 sample <- sqldf(query) 
  print(
  (t.test(f ~ Vote_in_Election, data=sample, var.equal = FALSE) ) ) 

} }

它会引发“可变长度”错误

> [1] "Age" [1] "Citizenship is NATIVE, BORN IN THE UNITED STATES"  Show
> Traceback Error in model.frame.default(formula = f ~ Vote_in_Election,
> data = sample) : variable lengths differ (found for
> 'Vote_in_Election')

如果我取出外循环,我可以正常运行它,当然,我必须将值一个一个地放入“因子”中。

在 Windows 10 上运行 R Studio 版本 1.1.463,R 为 3.5.2。

因为我迭代 i 时会有不同的数据行,所以我尝试设置paired = FALSE,它仍然对我大喊大叫。

我已经查看了 SO,但没有找到解决方案。我错过了什么?

【问题讨论】:

  • 一个发布的建议是关于 var.test 但该解决方案也不起作用。
  • 注意sqldf可以写成:sample &lt;- fn$sqldf("select * from result2 where Citizenship = $i")

标签: r nested-loops t-test


【解决方案1】:

要动态构建公式,您需要在as.formula 中强制转换字符串版本的公式:

t.test(as.formula(paste(f, "~ Vote_in_Election")), data=sample, var.equal = FALSE) 

或使用reformulate:

t.test(reformulate("Vote_in_Election", response=f), data=sample, var.equal = FALSE)

【讨论】:

  • 太棒了。这就像一个魅力。非常感谢。我在那个问题上苦苦挣扎。
猜你喜欢
  • 1970-01-01
  • 2023-03-02
  • 1970-01-01
  • 2020-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-15
  • 2018-07-14
相关资源
最近更新 更多