【问题标题】:How to assign object to output of a function?如何将对象分配给函数的输出?
【发布时间】:2020-09-11 21:21:40
【问题描述】:

我正在尝试为 Sys.Date() 的输出分配一些内容。例如,假设我想用今天的日期命名对象:

format(Sys.Date(), "%b%d") <- mtcars

我得到了错误:
赋值左侧无效 (NULL)。

我试过了:
eval(parse(text = format(Sys.Date(), "%b%d"))) <- mtcars

获取相同的错误消息。我错过了什么/有解决方案吗?

【问题讨论】:

  • 为什么要这样做?在 R 中,将数据存储在变量名本身通常是一个坏主意。如果您需要动态生成名称以使用命名列表并避免使用 eval()assign() 函数会更好,因为它们会产生不必要的开销。
  • 我基本上是在为我正在处理的数据帧添加时间戳——我现在手动命名它们,如果我想运行的假设越多,这就会变得乏味。我可以看到将它们保存在一个列表中的价值,一个更少的混乱,但我如何将一个新元素添加到列表中的动态命名槽?我有包含元素 Sep03 和 Sep09 的列表 x - 如何将动态命名的元素 Sep11 添加到 x?
  • 您可以分配任何字符串值,例如x[["Sep11"]] <- mtcars 或返回字符串值x[[format(Sys.Date(), "%b%d")]] <- mtcars 的函数。然后你将把所有值很好地存储在x 中,你可以使用x[["Sep11"]]x$Sep11 获取它们,甚至可以对列表中的每个元素应用一个函数。
  • @MrFlick 分配给命名列表中的函数输出有效,我看到自己正在使用它。然而,我的问题是关于在全球环境中分配,所以我将把 akrun 作为接受的答案。将其作为单独的答案提供给其他人查找?猜测 SO 将加权答案而不是 cmets。

标签: r


【解决方案1】:

我们可以使用assign

assign(format(Sys.Date(), "%b%d"), mtcars)

head(Sep11)
#                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
#Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
#Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
#Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
#Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
#Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
#Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

【讨论】:

  • 谢谢!我确实尝试先分配,但只是将 format() 包装在其中并得到相同的错误。
猜你喜欢
  • 2010-11-27
  • 1970-01-01
  • 2021-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多