【问题标题】:Reformatting the output of eval in R在 R 中重新格式化 eval 的输出
【发布时间】:2019-01-28 06:25:33
【问题描述】:

我想知道是否有一种聪明的方法可以使eval(x2) 的输出变成listeval(x1) 的输出完全一样而不改变x2

P.S.我的最终目标是实现此输出重新格式化的功能。

x1 = list(dbinom(1:5, 5, .1), dbinom(1:7, 5, .1))

eval(x1)  ## this list format output is desired


x2 = c(dbinom(1:5, 5, .1), dbinom(1:7, 5, .1))

eval(x2)  ## can make this output to become like that of `eval(x1)`?

【问题讨论】:

  • 为什么要评估已经评估过的对象? eval 没有在这里做任何事情。
  • 问题不清楚。如果是字符串,则需要评估,即eval(parse(text = sub("c", "list", 'c(dbinom(1:5, 5, .1), dbinom(1:7, 5, .1))')))

标签: r list function vector


【解决方案1】:

我们可以命名向量,然后split ?

x2 <- c(a = dbinom(1:5, 5, .1), b = dbinom(1:7, 5, .1))
split(x2, substr(names(x2), 1, 1))

#$a
#     a1      a2      a3      a4      a5 
#0.32805 0.07290 0.00810 0.00045 0.00001 

#$b
#     b1      b2      b3      b4      b5      b6      b7 
#0.32805 0.07290 0.00810 0.00045 0.00001 0.00000 0.00000 

【讨论】:

  • 问题是我们在实际情况下没有x1。所以我们应该单独知道x2中的每个变量是什么,即dbinom(1:5, 5, .1)dbinom(1:7, 5, .1),然后将它们的输出列表作为一个列表?
  • @rnorouzian 哦..我明白了,但是为什么要使用 c() 而不是 listlist(dbinom(1:5, 5, .1), dbinom(1:7, 5, .1)) ?我们如何确定一个结束而另一个开始?
  • 可以给向量命名吗?更新了上面的答案。
猜你喜欢
  • 2016-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-24
  • 2012-10-15
  • 1970-01-01
  • 2015-08-20
  • 1970-01-01
相关资源
最近更新 更多