我已經生成了與字母表中的每個字母相對應的空串列。串列的名稱采用l_A, l_B, ... 我還有一個填充字串的單列資料框(全部小寫,無符號)。我想將這些字串按它們的第一個字母排序到相應的串列中,例如,單詞“aardvark”將進入 list l_A。
遍歷資料框時,我在呼叫正確串列時遇到問題。這是我嘗試使用 for 回圈進行排序。例如,我使用使用庫“OpenRepGrid”構建的隨機單詞串列(全部小寫)來構建起始資料框。
install.packages("OpenRepGrid")
library(OpenRepGrid)
# random words data frame
df <- data.frame(tolower(randomWords(100)))
# lists for each letter
for (i in 1:26){
nam <- paste0("l_", LETTERS[i])
assign(nam, list())
}
# sorting words in data frame into lists using for loops
for (i in 1:nrow(df)){
for (j in 1:26){
if (substr(df[i, 1], 1, 1) == letters[j]){
append(eval(as.name(paste0("l_", LETTERS[j]))), df[i, 1])
}
}
}
空串列正確生成,我沒有收到任何錯誤,但我所有的串列最終仍然是空的。這讓我認為問題是嘗試使用eval(as.name(paste0("l_", LETTERS[j]))). 我知道我可以為每個串列撰寫 if 陳述句而不是使用嵌套的 for 回圈,但這對于 26 個串列來說很麻煩!
即使您有更優雅的方法,我仍然想知道我需要做什么才能使我當前的方法以及您自己推薦的解決方案起作用。
蒂亞!
uj5u.com熱心網友回復:
OPlist在回圈中創建 NULL 。它也可以以更簡單的方式完成
> l_A
list()
在第二個回圈中,我們需要get將listcreated for appending的值assign回傳到同一個物件
for (i in 1:nrow(df)){
for (j in 1:26){
if (substr(df[i, 1], 1, 1) == letters[j]){
tmp <- paste0("l_", LETTERS[j])
assign(tmp, append(get(tmp), df[i, 1]))
}
}
}
-檢查
> l_A
[[1]]
[1] "as"
[[2]]
[1] "airplane"
[[3]]
[1] "as"
[[4]]
[1] "away"
[[5]]
[1] "airplane"
[[6]]
[1] "airplane"
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/394674.html
上一篇:在R中提取矩陣的非對角元素
下一篇:從具有多個相同符號的字串中提取段
