這裏是一個簡單的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