[英]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.