这里是一个简单的r问题,它基本上与正确理解我认为的列表语法有关。我有一系列的矩阵加载到一个列表中(接下来的一些初步计算),然后我想要进行一些基本的块平均。我的基本工作流程如下:将列表中的每个元素填充到R中的特定长度
1)将包含在列表中的每个向量四舍五入为整数,对应于我对平均值感兴趣的块数。
2)将列表中的每个向量填充到这个新的长度。
3)将列表中的每个矩阵转换为一个新的矩阵,然后我将应用colmeans忽略NA。
这很基本的工作流程如下这里显示的矢量简单的方法:http://www.cookbook-r.com/Manipulating_data/Averaging_a_sequence_in_blocks/
但是我有载体列表,而不是只是一个载体。例如对于两个块:
test1 <- list(a=c(1,2,3,4), b=c(2,4,6,8,10), c=c(3,6))
# Round up the length of vector the to the nearest 2
newlength <- lapply(test1, function(x) {ceiling(length(x)/2)*2})
现在我的问题。如果这些人名单外基质我通常会垫其长度为NAS如下:
test1[newlength] <- NA
但如何做到这一点使用lappy上(或东西akin- mapply?)。我显然不是思考语法正确位置:
lapply(test1, function(x) {x[newlength] <- NA})
这显然将返回错误:
Error in x[newlength] <- NA : invalid subscript type 'list'
因为对列表中的语法不正确。那么我应该如何正确地做到这一点?
刚刚完成的过程中情况下在最后我通常会做以下矢量这样做的完全更好的办法:
# Convert to a matrix with 2 rows
test1 <- matrix(test1, nrow=2)
# Take the means of the columns, and ignore any NA's
colMeans(test1, na.rm=TRUE)
我会更好先留下一个列表环境?我列出的原因是我有一个大的数据集,使用列表似乎是一个更优雅的方法。然而,我接受建议和更合理的方法。谢谢。
填充的一个更安全的方法是'长度(X) < - newlength'。 – Roland