【问题标题】:How to iterate over list of tables and find proportions in R如何迭代表列表并在R中查找比例
【发布时间】:2021-03-21 05:06:43
【问题描述】:

我在 R 中有一个表列表,其中每个表都是来自更大数据集的列。这些是表格而不是数据框,因为我想使用 prop.table 来查找数据的出现百分比。

我是 R 新手,所以我一直在手动查找每个表的百分比。我试图把它变成一个 for 循环,但它似乎不起作用。循环循环正确的次数,但每次打开一个新的 View() 表时,它都会给我最后一个表“Actually_Malicious”的结果。

categorical_variables_list = list(Download_Source, 
                                  TLD, 
                                  Download_Speed, 
                                  Executable_Code_Maybe_Present_in_Headers,
                                  No_Executable_Code_Found_In_Headers,
                                  Evidence_of_Code_Obfuscation,
                                  Actually_Malicious)


for(col in 1:length(categorical_variables_list)){
  
  tab <- table(categorical_variables_list[[col]]); 
  View(tab);
  prop <- prop.table(tab); 
  View(prop);
}

【问题讨论】:

  • 如果您创建一个小的可重现示例以及预期的输出,这将更容易提供帮助。阅读how to give a reproducible example
  • 我同意,我应该创建一个可重现的示例,但我认为这类问题不需要它,因为我认为它更多的是关于我如何尝试访问列表。

标签: r loops for-loop


【解决方案1】:

可能是这样的,如果你放一个数据样本,答案可能会更清晰,你可以在下面尝试,但你也可以选择lapply,我已经添加了我的列列表(使用 mtcars数据集在这里):

categorical_variables_list<- list(mtcars[['cyl']], mtcars[['am']], mtcars[['vs']])

tab <- vector('list', length(categorical_variables_list)) 
prop <- vector('list', length(categorical_variables_list))

for(col in 1:length(categorical_variables_list)){
  
  tab[[col]] <- table(categorical_variables_list[[col]]);

  prop[[col]] <- prop.table(tab[[col]]) 

}

您的最终结果将在选项卡和道具中。使用 lapply 您可以执行以下操作:

tab <- lapply(categorical_variables_list,table)
prop <- lapply(tab, prop.table)

说明

在代码这里初始化tab/prop,你也可以做list(),但是它不会告诉R list的长度有多长,使用vector('list', length(...))既方便又高效地执行 for 循环,如果初始化正确,则 for 循环可以快速运行。 vector 的参数如下,第一个参数是你要创建的数据类型,假设如果你想创建一个数字原子向量而不是列表,那么你可以写 vector('numeric', length(...) ) 等对于其他类型,这里我想要列表因此写为向量('list',长度(...)),第二个参数只是它应该运行的 for 循环的长度(多少次),因为我知道将运行您的列表的长度。它是这样提到的。我希望这可以消除所有疑问。 lapply 很简单,lapply 将第一个参数捕获为列表,后一个参数是迭代列表中存在的每个元素的函数(这与您的循环所做的非常相似,但它更方便,而且您也没有'不必初始化对象)

【讨论】:

  • 感谢您的回答。你介意简单解释一下使用 vector() 和 lapply() 的区别吗?
  • @VehicularIT 添加了它
猜你喜欢
  • 1970-01-01
  • 2021-12-21
  • 2021-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-18
相关资源
最近更新 更多