【问题标题】:Dataframe type changes when returned in a list from a function [duplicate]当从函数的列表中返回时,数据框类型会发生变化[重复]
【发布时间】:2020-08-13 10:00:33
【问题描述】:

我在一个函数中生成两个数据帧,并在一个列表中返回它们

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])

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

提前感谢您的解释

托马斯·飞利浦

【问题讨论】:

  • 使用[[, df_a &lt;- df_lst[[1]]

标签: r list function dataframe


【解决方案1】:

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

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

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

df_lst[1:2]

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

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

此问答也很有帮助。 The difference between bracket [ ] and double bracket [[ ]] for accessing the elements of a list or dataframe

【讨论】:

  • 感谢磨坊 - 现在很清楚了!
  • @ThomasPhilips 很高兴能帮上忙!随意点击投票按钮旁边的复选标记accept the answer :-) 每个帖子只能接受一个答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-31
  • 2017-11-23
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多