簡體   English   中英

應用函數或R中的循環:非數字,返回NA

[英]Apply function or Loop in R: Not numerical, returning NA

我正在使用R中的重采樣過程(就像引導程序一樣)。 我有一個響應/解釋變量的矩陣,並希望對此矩陣進行999個樣本計算,以便為我正在計算的每個統計數據計算其均值,sd和置信區間。 因此,我編寫了一個函數來計算並返回列表:

mydata <- data.frame(a=rnorm(20, 1, 1), b = rnorm(20,1,1))

myfun <- function(data, n){
  sample <- data[sample(n, replace = T),]
  model1 <- lm(sample[,1]~sample[,2])
  return(list(model1[[1]][[1]], model1[[1]][[2]]))
}

result <- as.numeric()
result <- replicate(99, myfun(mydata, 10))

然后,我有一個矩陣作為輸出,其中的行是統計數據,列是抽樣(nrow = 2和ncol = 99)。 我需要每行的均值和sd,但是當我嘗試使用apply函數甚至循環時,將顯示以下消息:

在mean.default(newX [,i],...)中:
參數不是數字或邏輯:返回NA

此外:

is.numeric(result)
[1] FALSE

我覺得很奇怪,因為我在類似的程序中從未遇到過這樣的問題。

有什么想法嗎?

使用以下內容:

myfun <- function(dat, n){
  dat1 <- dat[sample(n, replace = T),]
  model1 <- lm(dat1[,1] ~ dat1[,2])
  return(coef(model1))
  }

replicate(99, myfun(mydata, 10))

原因是“結果”是包含維度屬性的198個元素的list 我們需要unlist “結果”並提供維度屬性

result1 <- `dim<-`(unlist(result), dim(result))

然后使用apply

只需在myfun()函數中將list()替換為c()

mydata <- data.frame(a=rnorm(20, 1, 1), b = rnorm(20,1,1))

myfun <- function(data, n){
  sample <- data[sample(n, replace = T),]
  model1 <- lm(sample[,1]~sample[,2])
  return(c(model1[[1]][[1]], model1[[1]][[2]]))
}

result <- as.numeric()
result <- replicate(99, myfun(mydata, 10))

apply(result, FUN=mean, 1)
apply(result, FUN=sd, 1)

這對我有用:

mydata <- data.frame(a=rnorm(20, 1, 1), b = rnorm(20,1,1))

myfun <- function(data, n){
  sample <- data[sample(n, replace = T),]
  model1 <- lm(sample[,1]~sample[,2])
  return(data.frame(v1 = model1[[1]][[1]], v2 = model1[[1]][[2]]))
}

result <- do.call("rbind",(replicate(99, myfun(mydata, 10), simplify = FALSE)))

暫無
暫無

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

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