R - 不能使用for循环生成的变量作为table()中的参数

时间:2016-09-21 09:41:54

标签: r

我试图在全局环境(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)时,一切运行正常。 e.g。

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可以帮助我的方式来表达这个问题。

1 个答案:

答案 0 :(得分:0)

目前在你的函数x中只是一个字符串。如果您想使用数据框中的列,请在for循环中执行此操作:

x <- df[,i]

然后你需要更改z,或者你要将一个列绑定到一个p值,也许只需更改为:

z <- cbind(i,y)

以便您知道哪个df列属于每个p值。

你应该小心,因为函数将搜索在其自身内创建的df,然后如果找不到它则移动到父环境,所以也许你可以将df作为参数传递以避免任何错误。< / p>