【问题标题】:R: Passing a dataframe to a function DynamicallyR:将数据帧动态传递给函数
【发布时间】:2016-05-15 12:48:12
【问题描述】:

我正在尝试将一些数据帧动态传递给一个函数,该函数将为每个数据帧返回一些统计结果。目的是将统计结果并排绘制。我遇到的问题是我将数据框分配给函数导致传递数据框的名称而不是实际的数据框本身。

例如,我的数据框称为construct 1,但代码并未传递代表此构造的实际数据框,而是传递了名称construct 1

谁能看看如何解决这个问题

# Get a list of all the dataframes in the workspace
my.dfs <- names(which(sapply(.GlobalEnv, is.data.frame))) 

# Filter to just the Alpha DataFrames
my.dfs <- as.data.frame(my.dfs) %>%
  filter(grepl('Alpha_', my.dfs)) %>% 
  mutate(my.table = as.character(my.dfs))

# Loop Through Each Table and get the Alpha Statistics
for (i in 1:nrow(my.dfs)){

  construct = my.dfs$my.table[i]
  construct_name = as.character(my.dfs$my.table[i])

  create_cronbach_summ(construct, construct_name)

}

最终结果会是这样的

Construct Name
Statistic 1
Statistic 2
Statistic 3....

我收到的错误信息是:

 Error in UseMethod("select_") : 
  no applicable method for 'select_' applied to an object of class "character

【问题讨论】:

    标签: r function dataframe


    【解决方案1】:

    查看deparse(susbtitute(x)) 以评估名称并传递真实的 data.frame 以进行进一步操作。强烈建议构建一个函数。 顺便说一句,您应该考虑使用列表,每个级别有一个 data.frame / 一个结果,并在 sapply(mylist,FUN=function(element){element$part} 或 sapply(mylist,FUN=function(element){create_cronback_summ(element)} 时提取信息。

    【讨论】:

    • 嗨@Eric Lecoutre,如果我使用以下代码:construct = my.dfs$my.table[1] construct = deparse(substitute(construct)) 变量构造返回“构造”。如果我查看变量my.dfs$my.table[1],我会得到我在引号中查找的表的名称。有什么想法吗?
    • 嗨@Eric,你的解决方案让我走上了正确的道路,因为我能够四处搜索并找到this,这导致我找到了这个代码:a &lt;- my.dfs$my.table[1] y = eval(parse(text=a))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-12
    • 1970-01-01
    • 2020-01-01
    • 2017-08-31
    相关资源
    最近更新 更多