恢复R中的(可重定义)列表

时间:2017-10-22 15:25:30

标签: r list

我有一组由此代码给出的数据:

mansions <- structure(list(紫微垣 = c("北極", "太子", "帝", "庶子", 
"後宮", "天樞[北極]", "四輔", "勾陳", "天皇大帝", 
"天柱", "御女", "女史", "柱史", "尚書", "天床", "大理", 
"陰德", "六甲", "五帝內座", "華蓋", "杠", "紫微左垣", 
"左樞", "上宰", "少宰", "上弼", "少弼", "上衛", "少衛", 
"少丞", "紫微右垣", "右樞", "少尉", "上輔", "少輔", 
"上衛", "少衛", "上丞", "天乙(天一)", "太乙(太一)", 
"內廚", "北斗", "天樞", "天璇", "天機", "天權", "玉衡", 
"開陽", "搖光", "輔", "天槍", "玄戈", "三公", "相", 
"天理", "太陽守", "太尊", "天牢", "勢", "文昌", "內階", 
"三師", "八榖", "傳舍", "天廚", "天棓"), 太微垣 = c("五帝座", 
"太子", "從官", "幸臣", "五諸侯", "九卿", "三公", 
"內屏", "太微左垣", "左執法", "東上相", "東次相", 
"東次將", "東上將", "太微右垣", "右執法", "西上將", 
"西次將", "西次相", "西上相", "郎將", "郎位", "常陳", 
"三台", "上台", "中台", "下台", "虎賁", "少微", "長垣", 
"靈台", "明堂", "謁者"), 天市垣 = c("帝座", "候", 
"宦者", "斗[天市]", "斛", "列肆", "車肆", "市樓", 
"宗正", "宗人", "宗", "帛度", "屠肆", "天市左垣", 
"魏", "趙", "九河", "中山", "齊", "吳越", "徐", "東海", 
"燕", "南海", "宋", "天市右垣", "河中", "河間", "晉", 
"鄭", "周", "秦", "蜀", "巴", "梁", "楚", "韓", "天紀", 
"女床", "貫索", "七公"), 角宿 = c("角", "平道", "天田", 
"周鼎", "進賢", "天門", "平", "庫樓", "柱", "衡", 
"南門"), 亢宿 = c("亢", "大角", "左攝提", "右攝提", 
"折威", "頓頑", "陽門"), 氐宿 = c("氐", "亢池", "帝席", 
"梗河", "招搖", "天乳", "天輻", "陣車", "車騎", "騎陣將軍", 
"騎官"), 房宿 = c("房", "鉤鈐", "鍵閉", "罰", "東咸", 
"西咸", "日", "從官"), 心宿 = c("心", "積卒"), 尾宿 = c("尾", 
"神宮", "天江", "傳說", "魚", "龜"), 箕宿 = c("箕", 
"糠", "杵"), 斗宿 = c("斗", "天龠", "天弁", "建", "天雞", 
"狗", "狗國", "天淵", "農丈人", "鱉"), 牛宿 = c("牛", 
"天桴", "河鼓", "左旗", "右旗", "織女", "漸臺", "輦道", 
"羅堰", "天田", "九坎"), 女宿 = c("女", "離珠", "敗瓜", 
"瓠瓜", "天津", "奚仲", "扶筐", "十二國", "周", "秦", 
"代", "趙", "越", "齊", "楚", "鄭", "魏", "韓", "晉", 
"燕"), 虛宿 = c("虛", "司命", "司祿", "司危", "司非", 
"哭", "泣", "璃瑜", "天壘城", "敗臼"), 危宿 = c("危", 
"墳墓", "蓋屋", "虛梁", "天錢", "人", "杵", "臼", 
"車府", "造父", "天鉤"), 室宿 = c("室", "離宮", "螣蛇", 
"雷電", "土公吏", "壘壁陣", "羽林軍", "天綱", "北落師門", 
"鈇鉞", "八魁"), 壁宿 = c("壁", "天廄", "土公", "霹靂", 
"雲雨", "鈇鑕"), 奎宿 = c("奎", "王良", "策", "附路", 
"軍南門", "閣道", "外屏", "天溷", "土司空"), 婁宿 = c("婁", 
"天大將軍", "左更", "右更", "天倉", "天庾"), 胃宿 = c("胃", 
"大陵", "積尸", "天船", "積水", "天廩", "天囷"), 
    昴宿 = c("昴", "天阿", "月", "卷舌", "天讒", "礪石", 
    "天陰", "芻蒿", "天苑"), 畢宿 = c("畢", "附耳", 
    "天街", "天高", "諸王", "五車", "柱", "威池", 
    "天潢", "天關", "天節", "九州殊口", "參旗", "九斿", 
    "天園"), 觜宿 = c("觜", "司怪", "座旗"), 參宿 = c("參", 
    "伐", "玉井", "軍井", "屏", "廁", "屎"), 井宿 = c("井", 
    "鉞", "水府", "天樽", "五諸侯", "北河", "積水", 
    "積薪", "水位", "南河", "四瀆", "闕丘", "軍市", 
    "野雞", "天狼", "丈人", "子", "孫", "老人", "弧矢"
    ), 鬼宿 = c("鬼", "積尸", "爟", "外廚", "天記", 
    "天狗", "天社"), 柳宿 = c("柳", "酒旗"), 星宿 = c("星", 
    "天相", "天稷", "軒轅", "御女", "內平"), 張宿 = c("張", 
    "天廟"), 翼宿 = c("翼", "東甌"), 軫宿 = c("軫", 
    "左轄", "右轄", "長沙", "青丘", "軍門", "土司空", 
    "器府"), 南極星區 = c("海山", "十字架", "馬尾", 
    "馬腹", "蜜蜂", "三角形", "異雀", "孔雀", "波斯", 
    "蛇尾", "蛇腹", "蛇首", "鳥喙", "鶴", "火鳥", 
    "水委", "附白", "夾白", "金魚", "海石", "飛魚", 
    "南船", "小斗")), .Names = c("紫微垣", "太微垣", 
"天市垣", "角宿", "亢宿", "氐宿", "房宿", "心宿", 
"尾宿", "箕宿", "斗宿", "牛宿", "女宿", "虛宿", "危宿", 
"室宿", "壁宿", "奎宿", "婁宿", "胃宿", "昴宿", "畢宿", 
"觜宿", "參宿", "井宿", "鬼宿", "柳宿", "星宿", "張宿", 
"翼宿", "軫宿", "南極星區"))

要从上面的列表中删除的另一个嵌套元素列表。

not.xingguan <- structure(list(V1 = c("太子", "帝", "庶子", "後宮", "天樞[北極]", 
+                                   "杠", "左樞", "上宰", "少宰", "上弼", "少弼", "上衛", 
+                                   "少衛", "少丞", "右樞", "少尉", "上輔", "少輔", "上衛", 
+                                   "少衛", "上丞", "天樞", "天璇", "天機", "天權", "玉衡", 
+                                   "開陽", "搖光", "輔", "左執法", "東上相", "東次相", 
+                                   "東次將", "東上將", "右執法", "西上將", "西次將", 
+                                   "西次相", "西上相", "上台", "中台", "下台", "魏", 
+                                   "趙", "九河", "中山", "齊", "吳越", "徐", "東海", 
+                                   "燕", "南海", "宋河中", "河間", "晉", "鄭", "周", 
+                                   "秦", "蜀", "巴", "梁", "楚", "韓", "鉤鈐", "神宮", 
+                                   "周", "秦", "代", "趙", "越", "齊", "楚", "鄭", "魏", 
+                                   "韓", "晉", "燕", "墳墓", "離宮", "附耳", "伐", "鉞", 
+                                   "御女", "左轄", "右轄", "長沙")), .Names = "V1")

我尝试使用以下代码执行此操作,但失败了:

tmp <- as.relistable(mansions)
tmp <- unlist(tmp)
tmp <- tmp[-which(tmp %in% not.xingguan$V1)]
mansions <- relist(tmp)

#Error in relist(tmp) : 
# The 'flesh' argument does not contain a skeleton attribute.
# Either ensure you unlist a relistable object, or specify the skeleton separately.

问题似乎在于我从tmp删除了一些项目,这些项目以某种方式删除了tmp中存储的初始as.relistable(mansions)的骨架数据。

我想要做的是恢复原始列表mansions,而不使用not.xingguan中找到的元素。

这个问题有解决方法吗?

1 个答案:

答案 0 :(得分:3)

一种方法可能是常规旧lapply()

lapply(mansions, function(x) x[!x %in% not.xingguan$V1])

很抱歉,如果这不是您期望的那种输出,我对陌生人物有点盲目