Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将循环应用于数据帧_R_Loops_Dataframe - Fatal编程技术网

R 将循环应用于数据帧

R 将循环应用于数据帧,r,loops,dataframe,R,Loops,Dataframe,我正在尝试将Johnson包中的RE.Johnson函数应用到包含16个变量的157个观察值的整个数据帧df,我希望在所有数据帧中循环,而不是手动执行。 我试过下面的代码,但不起作用 lapply(df[1:16], function(x) RE.Johnson(x)) 我知道这对你们来说可能很容易,但我只是从R开始。 谢谢 编辑 R为我提供了RE.ADT(xsl[,i]):未找到对象“p”中的错误答案,并且数据未转换。 以下是数据摘要: data.frame': 157 obs. of

我正在尝试将
Johnson
包中的
RE.Johnson
函数应用到包含16个变量的157个观察值的整个数据帧
df
,我希望在所有数据帧中循环,而不是手动执行。 我试过下面的代码,但不起作用

lapply(df[1:16], function(x) RE.Johnson(x))
我知道这对你们来说可能很容易,但我只是从R开始。 谢谢

编辑

R为我提供了RE.ADT(xsl[,i]):未找到对象“p”中的错误答案
,并且数据未转换。
以下是数据摘要:

data.frame':    157 obs. of  16 variables:
$ X         : num  786988 781045 777589 775266 786843 ...
$ Y         : num  486608 488691 490089 489293 488068 ...
$ Z         : num  182 128 191 80 131 ...
$ pH        : num  7.93 7.69 7.49 7.66 7.92 7.08 7.24 7.19 7.44 7.37 ...
$ CE        : num  0.775 3.284 3.745 4.072 0.95 ...
$ Nitrate   : int  21 14 18 83 30 42 47 101 85 15 ...
$ NP        : num  19.6 43.6 31.7 18.6 31.7 ...
$ Cl        : num  1.9 21.3 2.56 21.5 3.2 ...
$ HCO3      : num  6.65 4.85 4.4 7.72 4.1 ...
$ CO3       : num  0 0 0 0 0.0736 ...
$ Ca        : num  4.12 7.52 3.48 7.58 4.8 10 4.4 4.6 4.2 7.4 ...
$ Mg        : num  3.94 8.92 2.34 7.1 2.5 ...
$ K         : num  0.1442 0.0759 0.0709 0.3691 0.07 ...
$ Na        : num  2.41 34.55 2.51 44.01 2.1 ...
$ SO4       : num  1.45 23.6 1.2 26.66 2 ...
$ Residu_sec: num  0.496 2.102 2.397 2.606 0.608 ...

不是一个完整的解决方案,只是为其他人提供一些信息

我在
iris
数据框中的列上手动尝试了
Johnson::RE.Johnson
。这似乎只适用于
萼片长度
花瓣长度

lapply(iris[c(1,3)], Johnson::RE.Johnson)
。。。它返回您提到的
Sepal.Width
Petal.Width
的错误

lapply(iris[c(2,4)], Johnson::RE.Johnson)

Error in RE.ADT(xsl[, i]) : object 'p' not found
这看起来很奇怪,因为所有这些列的数据类型都是
num
iris
数据帧似乎没有任何缺失值或隐藏在任何位置的额外字符值,因此我不确定为什么计算对这些列有效,而对其他列无效

如果不太了解
Johnson::RE.Johnson
对数据的作用,它看起来就无法计算
p
的值,也无法完成这些列的迭代

通过探索源代码,函数似乎在这一点上崩溃了:

  if (xsb.valida[1, i] == 0) 
    xsb.adtest[1, i] <- (Johnson::RE.ADT(xsb[, i])$p) # succeeds
  if (xsl.valida[1, i] == 0) 
    xsl.adtest[1, i] <- (Johnson::RE.ADT(xsl[, i])$p) # fails
  if (xsu.valida[1, i] == 0) 
    xsu.adtest[1, i] <- (Johnson::RE.ADT(xsu[, i])$p) # fails
if(xsb.valida[1,i]==0)

adtest[1,i]问题是当函数尝试对一个等于值的向量执行Anderson-Darling测试时。如果执行此操作,将出现以下错误:

require(Johnson)
x = rep(1,n=100)
RE.ADT(x)
因此,要解决此问题,您可以在函数RE.Johnson内的IF会话中检查它:

    if (xsb.valida[1, i] == 0 & any(xsb[, i]!=xsb[1, i])){
        xsb.adtest[1, i] <- (RE.ADT(xsb[, i])$p)
    }else{
        xsb.adtest[1, i] <- 0
    }   
    if (xsl.valida[1, i] == 0 & any(xsl[, i]!=xsl[1, i])) {
        xsl.adtest[1, i] <- (RE.ADT(xsl[, i])$p)
    }else{
        xsl.adtest[1, i] <- 0
    }
    if (xsu.valida[1, i] == 0 & any(xsu[, i]!=xsu[1, i])) {
        xsu.adtest[1, i] <- (RE.ADT(xsu[, i])$p)
    }else{
        xsu.adtest[1, i] <- 0
    }
if(xsb.valida[1,i]==0&any(xsb[,i]!=xsb[1,i])){

adtest[1,i]这是模糊的:“但它不起作用。”请进一步解释。是否有错误?输出是否与预期不同?欢迎使用StackOverflow。请花时间阅读此帖子,以及如何提供答案并相应修改您的问题。这些提示可能也很有用。有了数据示例和它给出的错误,将更容易帮助您。type
dput(head(df,20))
在控制台中,然后将结果粘贴到此处,以便为我们提供示例数据,如果输入是数据帧并且操作在try:df[,1:16]列上是的,我已经对我的数据运行了相同的测试,有些列有问题,但其他列没有…我不知道为什么要对源代码进行一些探索性的工作,请参见上面的编辑。希望这足以让其他人了解到底发生了什么。