簡體   English   中英

R.將多項式檢驗應用於數據幀列表

[英]R. lapply multinomial test to list of dataframes

我有一個數據幀A ,我將其分成100個數據幀的列表,每個數據幀有3行(在我的真實數據中,每個數據幀有500行)。 在這里,我顯示了A,其中包含列表的2個元素(row1-row3; row4-row6):

A <- data.frame(n = c(0, 1, 2, 0, 1, 2),
                prob = c(0.4, 0.5, 0.1, 0.4, 0.5, 0.1),
                count = c(24878, 33605, 12100 , 25899, 34777, 13765))

# This is the list:
nest <- split(A, rep(1:2, each = 3))

我想對這些數據幀中的每一個應用多項式檢驗,並提取每個檢驗的p值。 到目前為止,我已經做到了:

library(EMT)

fun <- function(x){
  multinomial.test(x$count,
                   prob=x$prob,
                   useChisq = FALSE, MonteCarlo = TRUE,
                   ntrial = 100, # n of withdrawals accomplished
                   atOnce=100)
}

lapply(nest, fun)

但是,我得到:

 "Error in multinomial.test(x$counts_set, prob = x$norm_genome, useChisq = F,  : 
   Observations have to be stored in a vector, e.g.  'observed <- c(5,2,1)'"

有人有更聰明的方式嗎?

結果split與名稱創建12等。 這就是為什么無法獲得x$countfun 為了更簡單,您可以使用list函數組合lapply元素,然后使用lapply

n <- c(0,1,2,0,1,2)
prob <- c(0.4, 0.5, 0.1, 0.4, 0.5, 0.1)
count <- c(24878, 33605, 12100 , 25899, 34777, 13765)
A <- cbind.data.frame(n, prob, count)

nest = split(A,rep(1:2,each=3))

fun <- function(x){
  multinomial.test(x$count,
                   prob=x$prob,
                   useChisq = F, MonteCarlo = TRUE,
                   ntrial = 100, # n of withdrawals accomplished
                   atOnce=100)
}

# Create a list of splitted elements
new_list <- list(nest$`1`, nest$`2`)

lapply(new_list, fun)

使用dplyr的解決方案。

A = data.frame(n = c(0,1,2,0,1,2),
               prob = c(0.4, 0.5, 0.1, 0.4, 0.5, 0.1),
               count = c(43, 42, 9, 74, 82, 9))

library(dplyr)
nest <- A %>%
  mutate(pattern = rep(1:2,each=3)) %>%
  group_by(pattern) %>%
  dplyr::summarize(mn_pvals = multinomial.test(count, prob)$p.value)
nest

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM