docker4.9.0.9
R 4.0中有一些有趣的更改和更新。 在这里,我将看看其中的三个。 另外,我将为您提供有关安装R 4.0的分步说明,以便它不会干扰您现有的R安装-通过在Docker上运行R。
Docker是一个用于创建“容器”的平台-计算机上完全独立的,隔离的环境。 将它们视为系统上的小型系统。 它们包括自己的操作系统,然后包括您要添加的任何内容-应用程序软件,脚本,数据等。容器在很多方面都很有用,但是在这里,我仅关注一个:测试软件的新版本无需搞砸您当前的本地设置。
[ 在InfoWorld的“用R做更多”的视频系列中获取Sharon Machlis的R技巧 | 按任务,主题或程序包搜索“用R做更多”操作视频 ]
在Docker容器中运行R 4.0和RStudio的最新预览版非常容易。 如果您不想遵循本教程的Docker部分,而只想查看R中的新增功能,请向下滚动至“三个R 4.0新功能”部分。
在Docker容器中运行R 4.0
如果您想继续,请在系统上安装桌面Docker(如果尚未安装):前往https://www.docker.com/products/docker-desktop并为您的计算机下载正确的桌面版本( Windows,Mac或Linux)。 然后,启动它。 您应该看到系统上某处运行着鲸鱼Docker图标。
![Docker图标](https://i-blog.csdnimg.cn/blog_migrate/7f5a35d0bb03e0506387a99e0b30fce7.jpeg)
Docker图标
接下来,我们需要R 4.0的Docker映像。 您可以将Docker映像视为一组说明,以创建包含特定软件的容器。 感谢Adelmo Filho (巴西的数据科学家)和Rocker R Docker项目,他们提供了一些非常有用的Docker映像。 我只是稍微修改了它们的Docker映像,以制作本教程中使用的映像。
这是在您自己的系统上运行 Docker映像以创建容器的语法。
docker run --rm -p 8787:8787 -v /path/to/local/dir:/home/rstudio/newdir username/docker_image_name:image_tag
docker
是您需要启动任何Docker命令的方式。 run
表示我要运行图像并根据该图像创建容器。 --rm
标志意味着在完成后删除容器。 你不必包括--rm
; 但是如果您运行大量容器并且不删除它们,它们将开始占用大量磁盘空间。 -p 8787:8787
仅用于必须在系统端口上运行的映像(RStudio会这样做)(如果打算有朝一日包括,则Shiny也是如此)。 上面的命令指定端口8787,这是RStudio通常的默认端口。
-v
创建一个卷。 还记得我说过Docker容器是独立的和隔离的吗? 那意味着孤立 。 默认情况下,容器无法访问其外部的任何内容,而系统的其余部分则无法访问容器内部的任何内容。 但是,如果设置卷,则可以将本地文件夹与容器内的文件夹链接。 然后他们自动同步。 语法:
-v path/to/local/directory:/path/to/container/directory
使用RStudio,通常将/home/rstudio/name_of_new_directory
用于容器目录。
docker run
命令的末尾是您要运行的映像的名称。 我的映像与许多Docker映像一样,存储在Docker Hub上, Docker Hub是Docker设置的用于共享映像的服务。 与GitHub一样,您可以通过指定username/reponame
来访问项目。 在这种情况下,您通常还添加:the_tag
,如果同一图像的不同版本,则有帮助。
您可以修改以下代码,以在系统上使用R 4.0和RStudio的最新预览版运行我的图像。 确保替换您的目录为/用户/ smachlis /文档/ MoreWithR的一个路径。 您可以在Mac终端窗口或Windows命令提示符或PowerShell窗口中运行它。
docker run --rm -p 8787:8787 -v /Users/smachlis/Documents/MoreWithR:/home/rstudio/morewithr sharon000/my_rstudio_image:version1
首次运行此命令时,Docker将需要从Docker Hub下载映像,因此可能需要一段时间。 之后,除非您删除图像的本地副本,否则它应该快得多。
现在,当您在浏览器中打开localhost:8787
时,应该会看到RStudio。
![RStudio登录屏幕](https://i-blog.csdnimg.cn/blog_migrate/76beedbe9151081ed27b31d8695d769b.jpeg)
RStudio通过Docker容器在浏览器窗口中运行。
默认的用户名和密码均为rstudio,如果您在云中运行它,那当然会很糟糕。 但是我认为在我的本地计算机上还可以,因为通常我的常规RStudio桌面上没有任何密码。
如果在容器化的R / RStudio中检查R版本,则会看到它是4.0版本。 RStudio的版本应为1.3.947,即本文首次发布时的最新预览版。 这些都是与本地计算机上安装的版本不同的版本。
R 4.0的三个新功能
现在让我们来看一下R 4.0的一些新功能。
新的stringAsFactors默认
在下面的代码中,我正在创建一个简单的数据框,其中包含有关四个城市的信息,然后检查结构。
City <- c("New York", "San Francisco", "Boston", "Seattle")
State <- c("NY", "CA", "MA", "Seattle")
PopDensity <- c(26403, 18838, 13841, 7962)
densities <- data.frame(City, State, PopDensity)
str(densities)
'data.frame': 4 obs. of 3 variables:
$ City : chr "New York" "San Francisco" "Boston" "Seattle"
$ State : chr "NY" "CA" "MA" "Seattle"
$ PopDensity: num 26403 18838 13841 7962
注意到任何意外情况吗? 即使我没有指定stringsAsFactors = FALSE.
,城市和州也是字符串stringsAsFactors = FALSE.
是的,最后,R data.frame的默认值为stringsAsFactors = FALSE
。 如果我在较旧的R版本中运行相同的代码,则City和State将是重要因素。
新的调色板和功能
接下来,让我们看一下R 4.0中的新内置函数: palette.pals()
。 这显示了一些内置的调色板。
palette.pals()
[1] "R3" "R4" "ggplot2" "Okabe-Ito"
[5] "Accent" "Dark 2" "Paired" "Pastel 1"
[9] "Pastel 2" "Set 1" "Set 2" "Set 3"
[13] "Tableau 10" "Classic Tableau" "Polychrome 36" "Alphabet"
另一个新函数palette.colors()
给出了有关内置调色板的信息。
palette.colors(palette = "Tableau 10")
blue orange red lightteal green yellow purple
"#4E79A7" "#F28E2B" "#E15759" "#76B7B2" "#59A14F" "#EDC948" "#B07AA1"
pink brown lightgray
"#FF9DA7" "#9C755F" "#BAB0AC"
如果随后在结果上运行scales包的show_col()
函数,则将获得调色板的漂亮彩色显示。
scales::show_col(palette.colors(palette = "Tableau 10"))
![显示Tableau 10调色板颜色](https://i-blog.csdnimg.cn/blog_migrate/0508ce7388a236c4abdaaf0f06525e1d.jpeg)
缩放结果:: show_col(palette.colors(palette =“ Tableau 10”))。
我做了一个小功能,将两者结合在一起,可以在一行代码中查看某些内置调色板:
display_built_in_palette <- function(my_palette) {
scales::show_col(palette.colors(palette = my_palette))
}
display_built_in_palette("Okabe-Ito")
![冈部伊藤调色板的彩色显示](https://i-blog.csdnimg.cn/blog_migrate/4ef55f4b55db9853ec76a591c33dd1d0.jpeg)
使用我的函数display_built_in_palette()查看Okabe-Ito调色板。
在R的早期版本中,这些代码都scales::show_col()
,因为在R 4.0之前仅scales::show_col()
可用。
字符串中的转义字符
最后,让我们看一下一个新函数,该函数可以更轻松地包含通常需要在字符串中转义的字符。
语法为r"(my string here)"
。 这是一个例子:
string1 <- r"("I no longer need to escape these " double quotes inside a quote," they said.)"
该字符串在一对双引号中包含一个未转义的引号。 如果显示该字符串,则会得到以下信息:
> cat(string1)
"I no longer need to escape these " double quotes inside a quote," they said.
我还可以在新函数内打印文字\n
。
string2 <- r"(Here is a backslash n \n)"
cat(string2)
Here is a backslash n \n
如果没有特殊的r"()"
函数,则\n
会作为换行符读取,并且不会显示。
string3 <- "Here is a backslash n \n"
cat(string3)
Here is a backslash n
在此基础R中,您需要使用第二个反斜杠来转义该反斜杠。
string4 <- "Usual escaped \\n"
cat(string4)
Usual escaped \n
在此示例中,这没什么大不了的,但是当您处理诸如复杂的正则表达式之类的内容时,它可能会变得复杂。
R 4.0中还有更多新功能。 您可以在R项目网站上查看所有详细信息。
有关将Docker与R结合使用的更多信息,请查看rOpenSci Labs简短而出色的R Docker教程 。
有关更多R技巧,请访问InfoWorld“使用R进行更多操作”页面 !
docker4.9.0.9