[英]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.