从 strsplit 生成的列表列表中提取并粘贴多个元素

Extract and paste multiple elements from a list of lists generated by strsplit

我正在尝试提取并粘贴使用 strsplit 生成的列表列表的元素。 例如:

cat<-c("X0831_d8_f1_2s_wt_8_ROI_009", "X0831_d8_f1_2s_wt_8_ROI_008", 
"X0831_d8_f1_2s_wt_8_ROI_007", "X0831_d8_f1_2s_wt_8_ROI_006", 
"X0831_d8_f1_2s_wt_8_ROI_005", "X0831_d8_f1_2s_wt_8_ROI_004", 
"X0831_d8_f1_2s_wt_8_ROI_003", "X0831_d8_f1_2s_wt_8_ROI_002", 
"X0831_d8_f1_2s_wt_8_ROI_001", "X0831_d8_f1_10s_wt_8_ROI_019", 
"X0831_d8_f1_10s_wt_8_ROI_018")

我可以使用 ldply 生成所需的字符向量:

mouse<-ldply(strsplit(cat, "_"))
paste(mouse$V4,mouse$V8,sep="_")

但一直在寻找一种更优雅的方法。也许使用 sapply 或类似的东西?

我可以生成一个包含一个元素的字符向量:

sapply(strsplit(cat, "_"), "[[",4 )

但想不出一种方法来提取这两个元素(并将它们粘贴在一起)。

您在 plyr 中的示例已经很不错了,但这里是在 sapply 中使用 anonymous function:

的方法
sapply(strsplit(cat, "_"), function(x){paste(x[[4]], x[[8]], sep="_")})

apply 系列和其他几个函数可以使用匿名函数,您可以在调用中定义它们。在这种情况下,我们有一个函数获取列表的每个成员(如 x),然后将 x[[4]]x[[8]] 粘贴在一起。