首页 > 解决方案 > 从函数的列表中返回时,数据框类型会发生变化

问题描述

我在一个函数中生成两个数据框并将它们返回到一个列表中

summarize_responses <- function(df, descriptor, subsetBy){
  .
  .

  df_sum           <- as.data.frame(df_sum)  
  df_sum_transpose <- as.data.frame(df_sum_transpose)
  
  return_list <- list(df_sum, df_sum_transpose)
  return(return_list)
}

在我的主要例程中,我按如下方式收集这些数据帧:

df_lst <- summarize_responses(df, INDEX_SCORES_BREAKOUTS[i],  DAILY_INDEX_SCORES)
df_a   <- df_lst[1]
df_b   <- df_lst[2]

但如果我输入

    Browse[2]> class(df_a)
    [1] "list"
    Browse[2]> typeof(df_a)
    [1] "list"

我希望 df_a 和 df_b 将是数据帧,因为我已强制它们成为summarize_responses. 但是这里出了点问题。虽然很容易通过键入来修复

df_a   <- as.data.frame(df_lst[1])
df_b   <- as.data.frame(df_lst[2])

我想了解为什么我的数据框变成了列表。

提前感谢您的解释

托马斯飞利浦

标签: rlistfunctiondataframe

解决方案


当您有数据框列表时,使用单括号 ( [) 访问列表中的元素总是会给您一个列表。考虑这个例子:

df_lst <- list(mtcars, iris)
class(df_lst[1])
#[1] "list"

这是因为使用[,您可以从列表中选择超过 1 个元素。

df_lst[1:2]

如果要访问数据框,请使用[[

class(df_lst[[1]])
#[1] "data.frame"

这个问答也很有帮助。括号 [ ] 和双括号 [[ ]] 用于访问列表或数据框元素的区别


推荐阅读