Jadi saya menemukan masalah yang sangat aneh dalam menulis fungsi kemudahan untuk menghitung jumlah baris di setiap kerangka data dalam daftar kerangka data. Saya pikir pasti ada beberapa perilaku dasar yang saya lewatkan, seperti pengindeksan pada daftar tidak berfungsi seperti yang saya kira, atau ada sesuatu yang dipaksa ke jenis variabel yang salah atau semacamnya. Adakah yang bisa membantu saudaranya?
Contoh yang dapat direproduksi:
myvec <- c(1,2,3,4,5)
df1 <- as.data.frame(rbind(myvec, myvec))
df2 <- as.data.frame(rbind(myvec, myvec, myvec))
dflist <- list(df1, df2)
nrow(dflist[[1]])
# output as expected: [1] 2
nrow(dflist[[2]])
# output as expected: [1] 3
# convenience function
countrows <- function(pglist) {
dfsizes <- rep(NA, length(pglist))
for (i in length(pglist)) {
dfsizes[i] <- nrow(pglist[[i]])
return(dfsizes)
}
}
newvector <- countrows(dflist)
newvector
# output totally not as expected: [1] NA 3
Saya pasti melewatkan sesuatu yang jelas di sini.
Ya, saya tahu ini bisa dilakukan dengan mudah dengan lapply(dflist, nrow)
--- dan itu benar-benar menghasilkan keluaran yang tepat. Tapi yang jelas saya tidak tahu cara mengulang elemen daftar dengan benar, dan itu adalah masalah selain karena ada cara yang lebih mudah untuk melakukan apa yang ingin saya capai...
Edit: seorang pemberi komentar yang baik hati menunjukkan bahwa saya memiliki pernyataan return di dalam loop for, ups. Namun, memperbaikinya masih menghasilkan keluaran buruk yang sama:
countrows2 <- function(pglist) {
dfsizes <- rep(NA, length(pglist))
for (i in length(pglist)) {
dfsizes[i] <- nrow(pglist[[i]])
}
return(dfsizes)
}
doom <- countrows2(dflist)
doom
# still bad output: [1] NA 3
suntingan kedua: Saya buruk dalam menghindari kesalahan sintaksis yang bodoh, seperti lupa memulai loop pada 1. Ups ganda. Lihat komentar dari Neal Fultz, yang tidak terlalu buruk dalam menghindari kesalahan sintaksis yang bodoh dibandingkan saya.
1:length(pglist)
di perulangan for. - person Neal Fultz   schedule 22.05.2015df1
, muncul kesalahan: duplikat nama baris. - person Frank   schedule 22.05.2015