我有一個串列串列。主串列的每個元素都是一個對應于一個音符的串列,串列中的每個音符都有一個名為 fold_ID 的整數。我想對每個檔案夾 ID 取樣一張便條。我目前正在這樣做:
folder_ID<-function(lYSt){
L<-lYSt
f91<-cbind(sapply(L, `[[`, "fold_id"),
seq(1,length(L)),
seq(1,length(L)))
colnames(f91)<-c("Folder ID","Note #",
"#Of notes in folder")
f91<-as.data.frame(f91)
f81<-table(sapply(L, `[[`, "fold_id"))
for(i in 1:length(f91[,1])){
fgd3<-as.numeric(f91[i,1])
fgd3<-f81[as.numeric(names(f81))==fgd3]
f91[i,3]<-fgd3
}
f92<-aggregate(f91$`Note #`,
by = list(f91$`Folder ID`,f91$`#Of notes in folder`),
function(x) sample(x,size = 1))
return(f92)
}
但是,為了測驗采樣的每個元素是否確實屬于對應的檔案夾 ID,我這樣做了:
eg<-folder_ID(LIST)
for(i in 1:length(eg[,2])){
print(NT.2[[eg[i,3]]]$fold_id)
print(eg[i,1])
print("________________________________")
}
然而,令我驚訝的是,并不是每個采樣的元素都對應于相應的檔案夾 ID。我想要這個部分
f92<-aggregate(f91$`Note #`,
by = list(f91$`Folder ID`,f91$`#Of notes in folder`),
function(x) sample(x,size = 1))
僅從每個檔案夾 ID 中采樣。現在,奇怪的是,它主要從相應的檔案夾 ID 中采樣,但并非總是如此。我希望輸出保留檔案夾部分中的注釋數量。
編輯這是串列的一個例子:
[[1]]
[[1]]$fold_id
[1] 1
[[1]]$content
[1] "whats written in the note"
[[2]]
[[2]]$fold_id
[1] 2
[[2]]$content
[1] "whats written in the second note"
uj5u.com熱心網友回復:
您可以嘗試這種方式.. 假設您的 list-of-lists 被呼叫mylist,并且它具有您在上面顯示的結構
將您的檔案夾 ID 和注釋推送到表格中
library(data.table)
dat =data.table(fold_id = sapply(mylist,\(x) x[["fold_id"]]),
content = sapply(mylist,\(x) x[["content"]])
)
現在,從每個檔案夾中取樣一個筆記
dat[, .SD[sample(1:.N,1)], by=fold_id]
我制作了一個這樣的虛假串列:
# fake list of lists
mylist = lapply(1:500, \(x) list(fold_id = sample(1:10,1),content=paste0(sample(letters,25), collapse="-")))
它看起來像這樣:
> mylist[1:3]
[[1]]
[[1]]$fold_id
[1] 4
[[1]]$content
[1] "y-e-m-a-n-r-s-q-g-i-o-d-w-p-h-l-f-b-c-j-t-v-z-x-u"
[[2]]
[[2]]$fold_id
[1] 7
[[2]]$content
[1] "m-q-f-k-g-z-u-x-i-b-t-e-j-y-n-d-s-w-c-v-h-o-a-l-p"
[[3]]
[[3]]$fold_id
[1] 7
[[3]]$content
[1] "t-w-q-n-x-b-p-j-e-s-a-h-r-u-v-f-z-i-k-c-g-y-l-d-o"
上述操作的結果,從十個檔案夾 id 中的每一個中回傳一個注釋
fold_id content
1: 4 k-x-h-n-g-e-p-f-z-w-a-j-r-i-o-c-m-d-q-b-v-l-y-u-s
2: 7 q-v-n-l-d-k-a-u-h-x-w-e-f-r-c-y-p-b-z-j-m-g-s-o-i
3: 5 k-q-m-v-p-g-b-f-t-l-r-i-u-c-x-a-y-n-o-s-e-w-d-j-z
4: 1 w-r-t-f-a-j-b-n-q-v-u-d-i-e-s-c-l-k-m-z-h-p-g-x-o
5: 6 p-a-v-f-d-z-c-n-x-j-m-b-s-l-w-o-h-e-y-t-i-u-r-g-q
6: 9 b-y-v-o-j-i-g-m-q-f-t-e-u-d-a-z-c-k-p-x-h-r-n-w-l
7: 3 h-u-s-a-o-t-b-p-r-k-j-x-q-z-e-m-y-v-d-n-i-f-l-w-c
8: 8 v-f-m-u-c-d-o-t-h-x-l-p-r-j-g-a-s-y-w-e-n-i-z-q-k
9: 2 j-o-r-x-g-p-t-v-z-a-n-l-y-e-f-w-s-h-k-q-m-i-u-b-c
10: 10 p-n-z-c-k-a-l-o-s-g-j-f-i-b-w-d-q-y-u-v-t-r-m-x-e
這是另一種方法,如果您不想使用此表,請按組進行采樣。
- 獲取唯一檔案夾
folders = unique(sapply(mylist, \(x) x[["fold_id"]]))
- 回圈遍歷每個檔案夾,隨機選擇其中一個筆記
lapply(folders, \(f) {
notes = unlist(lapply(mylist, \(x) if(x[["fold_id"]] == f) x[["content"]]))
sample(notes, 1)
})
輸出:
[[1]]
[1] "w-c-u-t-l-m-n-a-g-x-f-p-i-k-y-h-d-z-o-e-v-r-b-s-q"
[[2]]
[1] "v-p-a-t-c-u-e-h-q-i-o-g-j-l-s-y-k-r-x-w-b-d-z-n-f"
[[3]]
[1] "i-a-n-c-j-s-z-q-u-o-d-p-w-l-e-t-g-b-k-f-x-v-h-m-y"
[[4]]
[1] "f-n-w-l-b-t-m-e-a-v-i-d-x-o-k-y-h-g-u-r-c-q-s-j-z"
[[5]]
[1] "x-q-a-g-j-r-k-u-y-l-p-i-w-d-h-m-v-o-e-t-n-c-z-f-b"
[[6]]
[1] "b-y-v-o-j-i-g-m-q-f-t-e-u-d-a-z-c-k-p-x-h-r-n-w-l"
[[7]]
[1] "g-a-t-u-p-o-s-l-h-r-d-f-v-m-q-x-k-z-c-i-y-b-w-e-n"
[[8]]
[1] "b-f-r-o-x-q-l-m-a-j-n-t-w-p-g-c-e-u-z-v-k-y-d-s-i"
[[9]]
[1] "s-a-m-j-c-q-t-u-w-d-y-l-e-g-k-v-b-z-n-x-o-r-p-i-h"
[[10]]
[1] "x-y-u-e-q-h-f-d-a-r-o-n-k-w-t-p-b-g-v-l-m-i-j-z-s"
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/435233.html
