每次迭代j = 1:10
时,都会将data[[j]]$city
分配给对象req.data
。这样做,对于步骤j = 2:10
,您是覆盖req.data
的前一个版本与j
th数据集的内容。因此req.data
在任何时候都只包含一个单独的city
的数据值,因此你得到的是错误的答案。你只计算最后一个城市的平均值,而不是全部10.
另外请注意,你可以请mean(req.data, na.rm = TRUE)
删除NA
s。
你可以做到这一点,而不在使用lapply()
利用者R级,例如一个明确的循环,以虚拟数据,
set.seed(42)
data <- list(data.frame(city = rnorm(100)),
data.frame(city = rnorm(100)),
data.frame(city = rnorm(100)))
mean(unlist(lapply(data, `[`, "city")), na.rm = TRUE)
这给
> mean(unlist(lapply(data, `[`, "city")), na.rm = TRUE)
[1] -0.02177902
所以你的情况,你需要:
mean(unlist(lapply(data[1:10], `[`, "city")), na.rm = TRUE)
如果你想写一个循环,那么也许
req.data <- vector("list", length = 3) ## allocate, adjust to length = 10
for (j in 1:3) { ## adjust to 1:10 for your data/Q
req.data[[j]] <- data[[j]]$city ## fill in
}
mean(unlist(req.data), na.rm = TRUE)
> mean(unlist(req.data), na.rm = TRUE)
[1] -0.02177902
是一种方式。或可替换地,计算各个城市的平均值,然后平均这些手段
vec <- numeric(length = 3) ## allocate, adjust to length = 10
for (j in 1:3) { ## adjust to 1:10 for your question
vec[j] <- mean(data[[j]]$city, na.rm = TRUE)
}
mean(vec)
感谢编辑帮助我,因为我一直在寻找与循环的实现的解决方案。还有一个问题是,当我把它放入一个函数中,并将id和城市名称作为参数传递并执行时,我得到NA作为答案并且出现警告信息。警告消息: 在mean.default(unlist(req。数据),na.rm = TRUE): 参数不是数字或逻辑:返回NA任何想法可能是什么原因。 Thnx – Arin
我想问一个新的问题;目前尚不清楚你的功能是什么样的,或者你是怎么称呼它的。 –