【问题标题】:Preserving data structure when returning values from function in R从R中的函数返回值时保留数据结构
【发布时间】:2017-08-17 18:27:11
【问题描述】:

我目前有一个用 R 编写的基本脚本,其中嵌入了两个函数:

FunctionA <- Function() {
  results_from_B <- FunctionB()
  results_from_C <- FunctionC()
}

函数 B 生成一些数据,然后在函数 C 中进行分析。

如果我停止函数 A 中的代码,我可以看到 results_from_C 的结构 - 它出现在“值”下,我可以使用语法 results_from_C$column_name1 引用不同的元素。

我在函数 C 中通过以下方式指定返回值来实现这一点:

return(list(column_name_1 = value1, column_name_2 = value2)

但是,我无法弄清楚如何从函数 A 返回这些相同的值(在相同的结构中) - 我尝试的所有内容都返回一个格式为“数据”而不是“值”的列表,并且无法使用语法results_from_A$column_name1

谁能帮助我了解我需要做什么才能从函数 A 之外的函数 C 中提取结果?

提前致谢

【问题讨论】:

  • 如果您提供reproducible example 并提供示例输入和所需输出,会更容易为您提供帮助。准确显示您尝试过的内容,以便更轻松地查看您想要完成的内容。如果您提供我们可以测试的东西,我们可以验证任何可能的解决方案。
  • results_from_C 应该是你的函数的输出,除非在你的真实情况下你之后打印一些东西,或者实际上分配给 results_from_C 的子集

标签: r


【解决方案1】:

我不明白您所说的格式化为“数据”而不是“值”是什么意思。 你描述的设置没有问题,我时不时在函数中使用函数,完全可以。

(注意R 区分大小写,它是function 而不是Function。)

FunctionA <- function() {
  FunctionB <- function() 1:2*pi
  FunctionC <- function(x) 
      list(column_name_1 = x[1], column_name_2 = x[2])

  results_from_B <- FunctionB()
  results_from_C <- FunctionC(results_from_B)
  results_from_C
}

result <- FunctionA()
result
$column_name_1
[1] 3.141593

$column_name_2
[1] 6.283185

result$column_name_1
[1] 3.141593

是这个吗?如果不是,请澄清您的问题。

【讨论】:

  • 谢谢,这确实解决了我一直在努力解决的问题,它也帮助我找出了导致我的问题的原因。如果我在上面的代码中再添加一行:result1 &lt;- replicate(1, FunctionA()) 并查看 R 中的环境查看器 - result 出现在“值”部分下,result1 出现在“数据”下你知道我可以如何使用复制函数(实际上我会从 1 开始增加值)并且仍然能够使用语法 result1$column_name_1? 引用列
  • @Texas replicate 返回一个 matrix 类的对象,因此您需要使用不同的语法访问其元素。例如,result1["column_name_1", 1]。标准做法是转置结果result1 &lt;- t(replicate(...))。然后使用更直观的result1[1, "column_name_1"]
  • @Texas 我忘了,replicate(..., simplify = FALSE) 会返回一个list。然后您可以使用result1[[1]]$column_name_1 访问这些值。
  • 刚刚尝试了您的第一个建议,似乎效果很好,第二个建议也非常有用。非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-05
相关资源
最近更新 更多