簡體   English   中英

無效的下標類型“列表”

[英]invalid subscript type 'list'

可重現示例的代碼:

lst1 <- c('a', 'b', 'c', 'd', 'e', 'f')
lst2 <- round(runif(6, min = 5, max = 12),4)
lst3 <- round(runif(6, min = 6, max = 30),4)
lst4 <- round(runif(6, min = 7, max = 28),4)
lst5 <- round(runif(6, min = 4, max = 25),4)

df1 <- data.frame('st' = lst1, 'value' = lst2)
df2 <- data.frame('st' = lst1, 'value' = lst3)
df3 <- data.frame('st' = lst1, 'value' = lst4)
df4 <- data.frame('st' = lst1, 'value' = lst5)

dfList <- list(df1, df2, df3, df4)

問題陳述:對數據框列表中的數據框的特定列進行排序
我正在使用如下所示的 for 循環:

dfRanked <- list()
for (df in dfList){
    dfRanked[[df]] <- df[order(df$value, decreasing = FALSE), ]
}

它的產生錯誤:

Error in dfRanked[[df]] <- df[order(df$value, decreasing = FALSE), ] : 
  invalid subscript type 'list'

for 循環中的迭代器df是一個數據框。 所以dfRanked[[df]]沒有意義。 您要求它根據列表 (data.frame) 對列表進行子集化。 我想你正在尋找這樣的東西。

dfRanked <- dfList

for (i in seq_along(dfRanked)){
  dfRanked[[i]] <- dfRanked[[i]][order(dfRanked[[i]]$value, decreasing = FALSE), ]
}

或者,這應該做同樣的事情,但更簡潔一些。 這將迭代每個元素並每次應用該函數。

lapply(dfList, function(df) df[order(df$value, decreasing = FALSE), ])

最后在tidyverse說話,你可以做這樣的事情。

library(dplyr)
library(purrr)

map(dfList, arrange, value)

暫無
暫無

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

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