簡體   English   中英

R:如何將原子向量更改為遞歸?

[英]R: How to change atomic vector to recursive?

我一直在嘗試使用 $ function 從數據框列表中提取特定列,但總是得到相同的錯誤。

作為參考,這是我用來讀取數據並將其匯總到列表中的代碼:

data_files <- list.files("D:\\My\\Data\\Path\\")
mctd_list<-list() # create empty list
for (i in 1:length(data_files)){
list[[i]]<-as.data.frame(read.csv2(data_files[i])) 
} # fill in data into list

到目前為止,這么好,這里沒有問題。 但是當我嘗試從每個數據框中刪除某一列中具有負值的行時,我得到了錯誤。 這是刪除我的行的循環:

for(i in 1:length(list)){
  list<-list[[i]][list[[i]]$column_x>=0,]
}

現在這不起作用,我得到錯誤:

$ operator is invalid for atomic vectors

為了檢查列表是否真的是原子的,我檢查了以下內容:

is.atomic(list[[i]]) # Output: TRUE
is.recursive(list[[i]]) # Output: FALSE

顯然數據確實是原子的,但我找不到將其轉換為遞歸的方法。 我試過

as.data.frame(list[[i]])

在循環之前,但它似乎什么也沒做。 之后,列表仍然是原子的。 有沒有我遺漏的東西,或者解決這個問題的簡單方法? 我想避免使用 [[]] 進行提取,因為這會帶來一堆新問題。

在這里ps dput() Output:

data <- as.data.frame(t(list[[i]])) # to transform into recursive
> dput(data)
structure(list(V1 = c(44854.79028, 19.19, -0.27, 0.01, 0, 1479.2
), V2 = c(44854.79063, 19.01, -0.27, 0.01, 0, 1478.64), V3 = c(44854.79097, 
18.72, -0.21, 0.01, 0, 1477.69), V4 = c(44854.79132, 18.45, -0.27, 
0.01, 0, 1476.82), V5 = c(44854.79167, 18.06, -0.32, 0.01, 0, 
1475.56), V6 = c(44854.79201, 17.64, -0.32, 0.01, 0, 1474.19), 
    V7 = c(44854.79236, 8.41, -1.35, 17.05, 19.03, 1461.43), 
    V8 = c(44854.79271, 4.69, 4.48, 21.48, 21.29, 1451.97), V9 = c(44854.79306, 
    2.95, 9.21, 25.62, 23.82, 1449.9), V10 = c(44854.7934, 2.22, 
    13.08, 26.96, 24.44, 1448.52), V11 = c(44854.79375, 2.07, 
    16.76, 27.83, 25.05, 1449.04), V12 = c(44854.7941, 1.83, 
    21.3, 28.6, 25.51, 1449.09), V13 = c(44854.79444, 1.91, 27.65, 
    29.26, 26.1, 1450.41), V14 = c(44854.79479, 2.14, 32.79, 
    29.68, 26.63, 1452.08), V15 = c(44854.79514, 2.37, 37.56, 
    29.89, 26.98, 1453.46), V16 = c(44854.79549, 2.41, 43.58, 
    30.16, 27.23, 1454.07), V17 = c(44854.79583, 2.41, 50.66, 
    30.39, 27.42, 1454.49), V18 = c(44854.79618, 2.37, 58.82, 
    30.63, 27.59, 1454.77), V19 = c(44854.79653, 2.26, 67.14, 
    30.8, 27.65, 1454.63), V20 = c(44854.79688, 2.18, 75.72, 
    31.01, 27.76, 1454.71), V21 = c(44854.79722, 2.03, 84.84, 
    31.42, 27.97, 1454.71), V22 = c(44854.79757, 2.18, 93.68, 
    31.74, 28.35, 1455.96), V23 = c(44854.79792, 2.26, 101.75, 
    31.8, 28.47, 1456.51), V24 = c(44854.79826, 2.3, 102.45, 
    31.76, 28.47, 1456.64), V25 = c(44854.79861, 2.3, 101.04, 
    31.76, 28.47, 1456.62), V26 = c(44854.79896, 2.3, 98.83, 
    31.74, 28.45, 1456.55), V27 = c(44854.79931, 2.3, 90.89, 
    31.51, 28.26, 1456.12), V28 = c(44854.79965, 2.11, 83.34, 
    31.34, 27.97, 1454.93), V29 = c(44854.8, 1.99, 75.46, 31.17, 
    27.74, 1454.06), V30 = c(44854.80035, 1.99, 66.89, 30.99, 
    27.58, 1453.68), V31 = c(44854.80069, 2.18, 58.35, 30.97, 
    27.72, 1454.38), V32 = c(44854.80104, 2.3, 50.29, 30.75, 
    27.63, 1454.46), V33 = c(44854.80139, 2.37, 43.26, 30.57, 
    27.53, 1454.44), V34 = c(44854.80174, 2.53, 36.86, 30.33, 
    27.46, 1454.7), V35 = c(44854.80208, 2.37, 30.09, 29.92, 
    27, 1453.37), V36 = c(44854.80243, 2.03, 22.85, 29.46, 26.36, 
    1451.12), V37 = c(44854.80278, 1.79, 16.08, 29.01, 25.81, 
    1449.38), V38 = c(44854.80313, 1.44, 10.6, 28.54, 25.17, 
    1447.09), V39 = c(44854.80347, 1.25, 5.7, 26.58, 23.46, 1443.52
    ), V40 = c(44854.80382, 0.93, 1.5, 24.88, 21.87, 1439.74), 
    V41 = c(44854.80417, 0.33, -1.03, 0, 0, 1403.66), V42 = c(44854.80451, 
    0.37, -0.97, 0, 0, 1403.86), V43 = c(44854.80486, 0.41, -1.03, 
    0, 0, 1404.06), V44 = c(44854.80521, 0.37, -0.97, 0, 0, 1403.86
    ), V45 = c(44854.80556, 0.37, -1.03, 0, 0, 1403.86), V46 = c(44854.8059, 
    0.29, -0.97, 0, 0, 1403.47), V47 = c(44854.80625, 0.25, -0.97, 
    0, 0, 1403.27), V48 = c(44854.8066, 0.17, -0.97, 0, 0, 1402.87
    ), V49 = c(44854.80694, 0, -1.51, 4.89, 4.7, 1408.6), V50 = c(44854.80729, 
    -0.08, -1.51, 4.83, 4.64, 1408.13), V51 = c(44854.80764, 
    -0.12, -1.46, 4.81, 4.62, 1407.91), V52 = c(44854.80799, 
    -0.16, -1.46, 4.8, 4.6, 1407.69), V53 = c(44854.80833, -0.24, 
    -1.46, 4.77, 4.56, 1407.24), V54 = c(44854.80868, -0.28, 
    -1.41, 4.77, 4.56, 1407.05), V55 = c(44854.80903, -0.36, 
    -1.41, 4.74, 4.52, 1406.6), V56 = c(44854.80938, -0.4, -1.41, 
    4.72, 4.5, 1406.37), V57 = c(44854.80972, -0.4, -1.41, 4.72, 
    4.5, 1406.37), V58 = c(44854.81007, -0.45, -1.41, 4.23, 4.05, 
    1405.51), V59 = c(44854.81042, -0.45, -1.46, 4.21, 4.03, 
    1405.48), V60 = c(44854.81076, -0.45, -1.41, 4.21, 4.03, 
    1405.48), V61 = c(44854.81111, -0.45, -1.46, 4.19, 4.01, 
    1405.45), V62 = c(44854.81146, -0.49, -1.41, 4.19, 4.01, 
    1405.26), V63 = c(44854.81181, -0.49, -1.41, 4.19, 4.01, 
    1405.26), V64 = c(44854.81215, -0.49, -1.41, 4.17, 3.99, 
    1405.23), V65 = c(44854.8125, -0.49, -1.41, 4.17, 3.99, 1405.23
    ), V66 = c(44854.81285, -0.49, -1.41, 4.17, 3.99, 1405.23
    ), V67 = c(44854.81319, -0.49, -1.41, 4.17, 3.99, 1405.23
    ), V68 = c(44854.81354, -0.53, -1.41, 4.18, 3.99, 1405.03
    ), V69 = c(44854.81389, -0.53, -1.46, 4.18, 3.99, 1405.03
    ), V70 = c(44854.81424, -0.57, -1.41, 4.16, 3.97, 1404.8), 
    V71 = c(44854.81458, -0.61, -1.35, 4.16, 3.97, 1404.6), V72 = c(44854.81493, 
    -0.61, -1.46, 4.16, 3.97, 1404.6), V73 = c(44854.81528, -0.61, 
    -1.41, 4.14, 3.95, 1404.57), V74 = c(44854.81563, -0.65, 
    -1.35, 5.12, 4.82, 1405.69), V75 = c(44854.81597, -0.73, 
    -1.35, 4.86, 4.57, 1404.92), V76 = c(44854.81632, -0.73, 
    -1.35, 3.91, 3.73, 1403.64), V77 = c(44854.81667, -0.69, 
    -1.35, 3.53, 3.39, 1403.33), V78 = c(44854.81701, -0.65, 
    -1.3, 3.57, 3.43, 1403.59), V79 = c(44854.81736, -0.61, -1.35, 
    0.33, 0.35, 1399.44), V80 = c(44854.81771, -0.53, -1.35, 
    0.76, 0.79, 1400.43), V81 = c(44854.81806, -0.4, -1.19, 3.81, 
    3.67, 1405.15), V82 = c(44854.8184, -0.32, -1.08, 3.73, 3.61, 
    1405.45), V83 = c(44854.81875, -0.24, -1.03, 3.92, 3.79, 
    1406.11), V84 = c(44854.8191, -0.12, -1.14, 0.24, 0.27, 1401.79
    ), V85 = c(44854.81944, -0.04, -0.92, 3.29, 3.23, 1406.27
    ), V86 = c(44854.81979, 0.05, -0.92, 0.39, 0.43, 1402.8), 
    V87 = c(44854.82014, 0.13, -0.86, 0.28, 0.31, 1403.04), V88 = c(44854.82049, 
    0.21, -0.7, 0, 0, 1403.07), V89 = c(44854.82083, 0.29, -1.03, 
    0.66, 0.71, 1404.35), V90 = c(44854.82118, 0.37, -1.03, 0.85, 
    0.91, 1405), V91 = c(44854.82153, 0.41, -0.97, 1.88, 1.94, 
    1406.58), V92 = c(44854.82188, 0.49, -1.03, 1.86, 1.92, 1406.93
    ), V93 = c(44854.82222, 0.53, -1.03, 2.12, 2.18, 1407.48), 
    V94 = c(44854.82257, 0.61, -1.03, 1.91, 1.98, 1407.59), V95 = c(44854.82292, 
    0.73, -1.03, 1.69, 1.76, 1407.87), V96 = c(44854.82326, 0.81, 
    -1.03, 1.92, 2, 1408.58), V97 = c(44854.82361, 0.93, -0.97, 
    1.74, 1.82, 1408.91), V98 = c(44854.82396, 1.05, -0.97, 1.75, 
    1.84, 1409.5), V99 = c(44854.82431, 1.13, -1.03, 1.71, 1.81, 
    1409.82), V100 = c(44854.82465, 1.25, -1.03, 1.72, 1.82, 
    1410.41), V101 = c(44854825, 1.36, -1.03, 1.68, 1.79, 1410.92
    ), V102 = c(44854.82535, 1.48, -0.97, 1.55, 1.67, 1411.32
    ), V103 = c(44854.82569, 1.64, -0.92, 0.5, 0.57, 1410.68), 
    V104 = c(44854.82604, 1.76, -0.92, 0.02, 0.03, 1410.61), 
    V105 = c(44854.82639, 1.87, -1.03, 0.01, 0.01, 1411.14), 
    V106 = c(44854.82674, 2.03, -0.97, 0, 0, 1411.86), V107 = c(44854.82708, 
    2.18, -0.81, 0, 0, 1412.6), V108 = c(44854.82743, 2.41, -0.86, 
    0, 0, 1413.69), V109 = c(44854.82778, 2.57, -0.86, 0, 0, 
    1414.4), V110 = c(44854.82813, 2.8, -0.92, 0, 0, 1415.47), 
    V111 = c(44854.82847, 3.1, -0.92, 0, 0, 1416.88), V112 = c(44854.82882, 
    3.4, -1.03, 1.91, 2.15, 1420.76)), class = "data.frame", row.names = c("Date_Time", 
"Temp_C", "Depth_m", "Salinity_psu", "Conduct_mScm", "Sound.Velocity_msec"
))
> 

虛擬數據:

list <- list()
list[[1]] <- data.frame(column_x = rnorm(5,0,1), V2 = rnorm(5,0,1))
list[[2]] <- data.frame(column_x = rnorm(5,0,1), V2 = rnorm(5,0,1))

正確的循環:

for(i in 1:length(list)){
list[[i]] <- list[[i]][list[[i]]$column_x > 0,]
}

雖然我很確定必須有一個更優雅的解決方案,使用purrr等列表的包。

暫無
暫無

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

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