我试图在数据帧上运行一个函数(z-test(,首先定义该函数,然后在单独的步骤中在所有行中迭代应用它。目标是为给定的目标变量形成新的colunm,该colunm包括z检验的p值。我似乎无法让迭代工作,因为我一直收到这个不熟悉的错误消息。
我定义函数:functionname <- function(V1,V2,V3,V4){...}
这一步似乎有效,我可以输入值,并得到正确的结果。我的迭代代码如下:
for (i in rownames(df)){
df[i, "newvariableA"] <- functionname(df[i,"V1"],df[i,"V2"],df[i,"V3"],df[i,"V4"])
df[i, "newvariableB"] <- functionname(df[i,"V1"],df[i,"V2"],df[i,"V3"],df[i,"V4"])
}
它产生错误信息
Error in x > n : comparison of these types is not implemented
我希望你们能给我一个指针,告诉我为什么会产生这个错误,或者另一种方法。
谢谢!
编辑:关于功能输出的更多信息:
functionname <- function(V1,V2,V3,V4){
ges1 <- V1/sqrt(2)
ges2 <- V2/sqrt(2)
t1 <- (V3/100)*ges1
t2 <- (V4/100)*ges2
sig <- prop.test(c(t1,t2),c(ges1,ges2),correct=FALSE)$p.value
sig <- round(sig,4)
if (sig>0.05){
sig <- "ns"
} else if (sig==0){
sig <- ".0000"
} else{
sig <- substr(toString(sig),start=2,stop=100)
}
return(sig)
}
这是我很久以前看到的一个问题,几年前我得到了一个R类当时对此没有任何解决方案。所以我们使用DF作为tibble而不是数据帧,然后问题就消失了。我不知道这是如何解决问题的,但它确实解决了。如果你没有任何限制将DF用作数据帧,你可以尝试它,并将其用作tibble
使用此
for (i in 1:nrow(df)){
df[i,"newvariableA"] <- ztestd(df[i,"V1"],df[i,"V2"],df[i,"V3"],df[i,"V4"])
}