【发布时间】:2016-09-21 09:41:53
【问题描述】:
我正在尝试在全局环境 (df) 中存在的数据框中的一组列上提取 prop.test p 值,并将它们保存为数据框。我有一个标准列和 19 个变量列(等等)
proportiontest <- function() {
prop_df <- data.frame()
for(i in 1:19) {
x <- paste("df$var_", i, sep="")
y <- (prop.test(table(df$criteria, x), correct=FALSE))$p.value
z <- cbind (x, y)
prop_df <- rbind(prop_df, z)
}
assign("prop_df",prop_df,envir = .GlobalEnv)
}
proportiontest()
当我运行它时,我得到了错误:
Error in table(df$criteria, x) : all arguments must have the same length
当我手动将列名插入函数(而不是 x)时,一切运行正常。例如
y <- (prop.test(table(df$criteria, df$var_1), correct=FALSE))$p.value
我似乎有使用通过for循环生成的变量(x)值作为参数的问题。
在这种情况下,我错过了什么或做错了什么?我尝试将 x 传递给 table() 函数 as.String(x) as.character(x) 以及无数其他函数,但无济于事。我似乎无法理解论证必须采用哪种形式。我可能误解了 R 中一些非常基本的东西,但这让我发疯了,我似乎无法以 google/SO 可以帮助我的方式提出问题。
【问题讨论】:
-
检查 x 的值。正如它所定义的那样,它是一个字符串。 (除此之外,你可能应该重新考虑你做整件事的方式......)
-
你在这里做的一切都错了。使用
assign,循环增长对象,用多个数据集破坏你的全局环境等等。你应该重新考虑为什么你认为你需要这个以及你想如何处理这个。 -
例如,假设
criteria是df的第一列(为简单起见),试试data.frame(P_vals = sapply(df[-1], function(x) prop.test(table(df$criteria, x), correct=FALSE)$p.value)) -
非常感谢!我必须说我是 R 的初学者(以及一般的编程),只是试图从逻辑上处理事情而不是“R 方式”。无论如何,您的示例运行良好,我肯定会在将来尝试以不同的方式处理这些事情。如果你看到我的脚本文件,你会杀了一只小猫,但至少我能得到我的答案!再次感谢'
标签: r