我试图在全局环境(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可以帮助我的方式来表达这个问题。
答案 0 :(得分:0)
目前在你的函数x中只是一个字符串。如果您想使用数据框中的列,请在for循环中执行此操作:
x <- df[,i]
然后你需要更改z,或者你要将一个列绑定到一个p值,也许只需更改为:
z <- cbind(i,y)
以便您知道哪个df列属于每个p值。
你应该小心,因为函数将搜索在其自身内创建的df,然后如果找不到它则移动到父环境,所以也许你可以将df作为参数传递以避免任何错误。< / p>