0

私はRの新人で、Rで関数を書き始めたばかりです。私の目的は、変動をチェックするプロセスを改善し、さらにANOVAまたはKruskal wallisテストを実行する関数を作成し、重要な項目の平均または中央値も計算することです.

Result<- function(variable, group, database){
  variable <- database$variable
  group <- database$group
  R1 <- database%>%
    bartlett.test(x= variable, g= group)
  R1
  if(R1>=0.05){ #ANOVA is suitable
    z <- aov(variable, group, data=database)
    zx<-summarize(z)
    zxc<- unlist(zx)['Pr(>F)1']
    if(zx<0.05){ #if result of ANOVA smaller than 0.05 then calculate the mean
      R2 <- database%>%
        group_by(group)%>%
        summarize(mean(variable))%>%
        print()
      R3 <- TukeyHSD(z, "variable")
      R3
      }
    }else{#k-w is suitable
      q <- kruskal.test(variable, group, data=database)
      qw <- q[["p.value"]]
      if(qw<0.05){
        R4 <- database %>%
          group_by(group) %>%
          summarise(mean(variable))%>%
          print()
        R5 <- dunnTest(variable, group, method="bonferroni", data= database)
        R5
      }
      }
}

関数に変数を入れた後、エラーが表示されました

Error in complete.cases(x, g) : no input has determined the number of cases
12.
complete.cases(x, g)
11.
bartlett.test.default(., x = variable, g = group)
10.
bartlett.test(., x = variable, g = group)
9.
function_list[[k]](value)
8.
withVisible(function_list[[k]](value))
7.
freduce(value, `_function_list`)
6.
`_fseq`(`_lhs`)
5.
eval(quote(`_fseq`(`_lhs`)), env, env)
4.
eval(quote(`_fseq`(`_lhs`)), env, env)
3.
withVisible(eval(quote(`_fseq`(`_lhs`)), env, env))
2.
database %>% bartlett.test(x = variable, g = group)
1.
Result(PCtoopday, patho, nmlab_PCintendedLC_forpatho)

しばらく調べてみましたが、変数で complete.case() はすべて TRUE です。関数の何が問題なのかわかりません。また、関数の他の部分がうまくいくかどうかもわかりません...皆さんが私を助けてくれることを願っています、ありがとう!

4

1 に答える 1

0

この問題は、関数での列を抽出する方法に起因しますdata.fram。次の 2 つの例を比較できます。前者はデータセットSpeciesの列を抽出するときに失敗しますが、後者は機能しirisます。

fun <- function(data, var){
  return(data$var)
}

fun(iris, Species)
# NULL
fun <- function(data, var){
  return(data[[var]])
}

fun(iris, "Species")
# [1] setosa  setosa  setosa  setosa  setosa
# ...

したがって、次のように関数を修正する必要があります。

Result<- function(variable, group, database){
  variable <- database[[variable]]
  group <- database[[group]]
  ...
}

そして、引用符 variablegroup引数を付けて実行します。

Result("PCtoopday", "patho", nmlab_PCintendedLC_forpatho)
于 2020-06-09T09:53:04.253 に答える