我很难掌握setDT()功能的本质.当我在SO上阅读代码时,我经常遇到setDT()创建data.table的用法.当然,data.table()无处不在的使用.我觉得我领悟扎实的性质data.table()还没有相关的setDT()逃避我.?setDT告诉我这个:
setDT通过引用将列表(包括命名和未命名)和data.frames转换为data.tables .
以及:
用
data.table说法,所有set*函数都通过引用来改变它们的输入.也就是说,除了临时工作存储器之外,根本不会复制任何副本,而临时工作存储器与一列一样大.
所以这让我觉得我应该只setDT()用来制作一个data.table,对吗?是setDT()一个简单的列表data.table转换器?
library(data.table)
a <- letters[c(19,20,1,3,11,15,22,5,18,6,12,15,23)]
b <- seq(1,41,pi)
ab <- data.frame(a,b)
d <- data.table(ab)
e <- setDT(ab)
str(d)
#Classes ‘data.table’ and 'data.frame': 13 obs. of 2 variables:
# $ a: Factor w/ 12 levels "a","c","e","f",..: 9 10 1 2 5 7 11 3 8 4 ...
# $ b: num 1 4.14 7.28 …Run Code Online (Sandbox Code Playgroud) 我的data.table有一个"模糊"日期时间格式的列:"12/1/2016 15:30".如何将此日期时间转换为data.table中识别的格式R,而不使用strptime()并获取最初转换为POSIXlt的警告消息.这个过程有效,但警告让我觉得还有另一种方法.
我的数据表:
my_dates <- c("12/1/2016 15:30", "12/1/2016 15:31", "12/1/2016 15:32")
this <- c("a", "b", "c")
that <- c(1, 2, 3)
my_table <- data.table(my_dates, this, that)
my_table
my_dates this that
1: 12/1/2016 15:30 1 a
2: 12/1/2016 15:31 2 b
3: 12/1/2016 15:32 3 c
my_table[, my_dates := as.POSIXct(strptime(my_dates, "%m/%d/%Y %H:%M"))]
Warning message:
In strptime(my_dates, "%m/%d/%Y %H:%M") :
POSIXlt column type detected and converted to POSIXct. We do not
recommend use of POSIXlt at all because it uses …Run Code Online (Sandbox Code Playgroud) 我想将Pipenv安装到一台机器上,以便该机器的所有用户都可以使用它,但我也不想弄乱系统 Python 设置。
我可以运行,sudo pip install pipenv但它会继续更改系统 Python 中安装的一堆软件包的版本(我使用的是 Scientific Linux 7.4)。我宁愿让系统 Python 完全与我的 linux 发行版提供的一样(因为我已经读到,弄乱系统 Python 是一个坏主意,因为核心系统工具可能以某种方式依赖它)。
我可以,pip install --user pipenv但只有我的用户可以使用 pipenv。
所以两个问题:
1. 我是否不必要地害怕修改系统 Python?在系统 Python 中更新包实际上可以吗?
2. 如果我的谨慎是有道理的,pip install对于所有用户来说,在不修改系统 Python 的情况下,最好的方法是什么(例如 Pipenv 之类的工具)?
理想情况下,我希望用户能够通过键入来使用 pipenv pipenv,而不必执行位于晦涩目录中的文件。
PS 理想的情况是 pipenv 可以作为我的发行版中的“安全”包提供,但可惜事实并非如此。我也知道 virtualenvs,但我的印象是它们更多地用于特定项目的开发和部署,并不一定适用于系统范围的工具(尽管我准备对此进行纠正)。
我在REPL中玩耍,发现关于内置object基类的行为使我感到困惑:
>>> object
<class 'object'>
>>> type(object)
<class 'type'>
Run Code Online (Sandbox Code Playgroud)
为什么object在这种情况下不是<class 'object'>呢?这里发生了什么事?
我找到了一些代码来生成一组小的倍数,它运行良好。
fig, axes = plt.subplots(6,3, figsize=(21,21))
fig.subplots_adjust(hspace=.3, wspace=.175)
for ax, data in zip(axes.ravel(), clean_sets):
ax.plot(data.ETo, "o")
Run Code Online (Sandbox Code Playgroud)
该行for ax, data in zip(axes.ravel(), clean_sets):contians.ravel()但我不明白这实际上在做什么或为什么有必要。
如果我查看文档,我会发现以下内容:
返回一个连续的扁平数组。
返回包含输入元素的一维数组。仅在需要时制作副本。
我猜对应于轴的返回值plt.subplot()是一个无法迭代的多维数组,但我真的不确定。一个简单的解释将不胜感激。
.ravel()在这种情况下使用的目的是什么?