r - R 对象未在运行时环境中正确存储
问题描述
我目前正在阅读“使用 R 进行动手编程”,第二部分我们创建了一副纸牌。在第 6 章中,我们创建了一个闭包,以便将函数和对象存储在其他 R 环境中,并且不需要全局环境中的任何对象来正常工作。我无法确保在这个新环境中正确表示所有进程的派生对象“BJDECK”(shuffle 和 deal 函数)。
到目前为止,这是一个过程:
- 我导入了deck.csv,这是一个包含 52 行和 3 个变量(“faces”、“suits”、“value”)的数据框
- 我通过运行它来更改卡片的值以匹配二十一点牌组:
deck <- data.frame(
face = rep(c("ace","king","queen","jack", 10:2), 4),
suit = rep(c("heart","diamond","spade","club"), each=13)
)
bjdeck <- deck
bjdeck$value[bjdeck$face %in% c("king", "queen", "jack")] <- 10
bjdeck$value[bjdeck$face == "ace"] <- NA ##Because an Ace value can be 1 or 11.
- 使用 GlobalEnv 中的这个“bjdeck”对象,我运行以下脚本:
setup <- function(abjdeck) { ##"abjdeck" stands for "a blackjack deck"
BJDECK <- bjdeck ##To create a copy of the original blackjack deck in the new environment.
SHUFFLE <- function() {
random <- sample(1:52, size = 52)
assign("abjdeck", BJDECK[random, ], envir = parent.env(environment()))
}
DEAL <- function() {
card <- abjdeck[1, ]
assign("abjdeck", abjdeck[-1, ], envir = parent.env(environment()))
card
}
list(deal = DEAL, shuffle = SHUFFLE, bjdeckorigin = BJDECK)
}
cards <- setup(bjdeck) ##To visualize in GlobalEnv everything that setup function contains, as far as I understand.
deal <- cards$deal
shuffle <- cards$shuffle
bjdeckorigin <- cards$bjdeckorigin ##I added this piece of code, because I was wondering how the BJDECK object from which the randomization was taking place was like.
- 到目前为止,一切都很好,在 GlobalEnv 中,对象“bjdeckorigin”是一个具有 52 个观察值和 3 个变量(正常)的数据框。洗牌和交易按预期工作。
- 问题是,当我清除 GlobalEnv,然后在第三点再次运行脚本时,“bjdeckorigin”现在是一个只有 51 个观察值(和 3 个变量)的数据框。第一个观察结果(“king”、“spades”、10)总是丢失。shuffle 和 deal 函数工作正常,但是如果,例如,我运行:
replicate(52, deal())
最后一个值是 NA、NA、NA,这应该是牌组中的最后一张牌(无论它是什么)。当我在清理 GlobalEnv 之前对其进行测试时,此复制函数会返回正确的值。
我已经尝试了我所知道的一切(而且我是一个完整的初学者)来弄清楚,但我一直得到相同的结果。
我感谢您的帮助。提前致谢。
解决方案
推荐阅读
- django - 如果Email无法生成,如何使用`@transaction`回滚注册用户?
- ssl - python应用程序中的SSLError,证书更新后
- ruby-on-rails - 如何在应用程序级别加密 ruby on rails 中的完整路由
- powershell - Powershell - 使用 ConvertFrom-csv
- vue.js - 在 VUE SPA 中添加 Facebook Pixel 特定页面
- javascript - D3 输入自定义图像 URL 的 SVG 模式填充的更新模式
- hadoop - 如何禁用 Yarn Web UI / Rest API?
- string - 有没有一种算法可以用英文短语中的倾斜变体('和')替换撇号(')?
- javascript - 在 TypeScript 中检查 isString/Number/ObjectConstructor
- javascript - How to open an S3 pre-signed URL in another tab?