我正在使用knitr来解析R Markdown文档.是否有办法根据我传入knitr的环境中的变量有条件地显示R Markdown中的文本块?
例如,类似于:
`r if(show.text) {`
la la la
`r }`
Run Code Online (Sandbox Code Playgroud)
如果show.text是真的,将在生成的文档中打印"la la la" .
该Vectorize()和apply()功能R往往可以用来完成相同的目标.出于可读性的原因,我通常更喜欢向量化函数,因为主调用函数与手头的任务有关,而sapply不是.Vectorize()当我在R代码中多次使用该向量化函数时,它也很有用.例如:
a <- 100
b <- 200
c <- 300
varnames <- c('a', 'b', 'c')
getv <- Vectorize(get)
getv(varnames)
Run Code Online (Sandbox Code Playgroud)
VS
sapply(varnames, get)
Run Code Online (Sandbox Code Playgroud)
但是,至少在SO上我很少看到Vectorize()解决方案中的例子,只有apply()(或其中一个兄弟姐妹).是否有任何效率问题或其他合理问题Vectorize()可以做出apply()更好的选择?
我注意到,对于data.tables,cbind需要比rbind长得多的时间.这是什么原因?
> dt <- as.data.table(mtcars)
> new.dt <- copy(dt)
> timeit({for (i in 1:100) dt.new <- rbind(dt.new, dt)})
user system elapsed
0.237 0.012 0.253
> new.dt <- copy(dt)
> timeit({for (i in 1:100) dt.new <- cbind(dt.new, dt)})
user system elapsed
14.795 0.090 14.912
Run Code Online (Sandbox Code Playgroud)
哪里
timeit <- function(expr)
{
ptm <- proc.time()
expr
proc.time() - ptm
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用pip工具安装scikits.audiolab.Pip似乎python setup.py egg_info从scikits.audiolab源目录中运行命令.当它这样做时,我收到此错误:
Andrews-MacBook-Pro-2:scikits.audiolab-0.11.0 andrewhannigan$ pip install scikits.audiolab
Collecting scikits.audiolab
Using cached scikits.audiolab-0.11.0.tar.gz
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 20, in <module>
File "/private/var/folders/xb/qwlsm44s1wxfr82kytrgjtl80000gn/T/pip-build-vSZaU8/scikits.audiolab/setup.py", line 32, in <module>
from numpy.distutils.core import setup
ImportError: No module named numpy.distutils.core
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/xb/qwlsm44s1wxfr82kytrgjtl80000gn/T/pip-build-vSZaU8/scikits.audiolab
Run Code Online (Sandbox Code Playgroud)
问题显然是无法导入numpy.distutils.core.查看setup.py脚本,这个导入很早就发生了(在下面的代码片段的底部):
#! /usr/bin/env python
# Last Change: Fri Mar 27 05:00 PM 2009 J
# Copyright (C) 2006-2007 …Run Code Online (Sandbox Code Playgroud) 现在我正在编写一些Python代码来处理大量的twitter文件.这些文件非常大,无法容纳在内存中.为了与他们合作,我基本上有两个选择.
我可以将文件拆分成可以放入内存的较小文件.
我可以逐行处理大文件,所以我永远不需要将整个文件同时放入内存中.我希望后者易于实现.
但是,我想知道在整个文件中读取内存然后从那里操作它是否更快.似乎从磁盘上逐行读取文件似乎很慢.但话说回来,我并不完全理解这些过程在Python中是如何工作的.有谁知道逐行文件读取是否会导致我的代码比我将整个文件读入内存并从那里操作它更慢?
将日期向量与NA结合使用时,如果NA首先出现,R会将整个向量强制转换为数字。如果不首先出现NA,它将强制日期。
x <- Sys.Date()
c(NA, x)
# [1] NA 16248
c(x, NA)
# [1] "2014-06-27" NA
Run Code Online (Sandbox Code Playgroud)
无论NA出现的顺序如何,我如何始终将其强制为Date?其次,如果我不知道x的类型怎么办,如何仍能确定它强制于向量x的类而不是数字呢?
假设我有一个使用transactions以下整数列调用的 DataFrame:year, month, day, timestamp, transaction_id。
In [1]: transactions = ctx.createDataFrame([(2017, 12, 1, 10000, 1), (2017, 12, 2, 10001, 2), (2017, 12, 3, 10003, 3), (2017, 12, 4, 10004, 4), (2017, 12, 5, 10005, 5), (2017, 12, 6, 10006, 6)],('year', 'month', 'day', 'timestamp', 'transaction_id'))
In [2]: transactions.show()
+----+-----+---+---------+--------------+
|year|month|day|timestamp|transaction_id|
+----+-----+---+---------+--------------+
|2017| 12| 1| 10000| 1|
|2017| 12| 2| 10001| 2|
|2017| 12| 3| 10003| 3|
|2017| 12| 4| 10004| 4|
|2017| 12| …Run Code Online (Sandbox Code Playgroud) 我正在运行ggsave('plot.pdf')并收到此错误:
Error in grDevices::pdf(..., version = version) :
cannot open file 'plot.pdf'
Run Code Online (Sandbox Code Playgroud)
即使我没有打开plot.pdf。我正在研究 NFS。如果我 ggsave 到一个新文件,然后再次运行 ggsave 到同一路径,它将成功覆盖该文件。但是,如果我在运行 ggsave 到同一路径之前打开并关闭文件,则会收到上述错误。对于为什么会发生这种情况有什么想法吗?
在R中,有没有办法从向量中引用向量?
说我有长名称的向量:
my.vector.with.a.long.name <- 1:10
Run Code Online (Sandbox Code Playgroud)
而不是这个:
my.vector.with.a.long.name[my.vector.with.a.long.name > 5]
Run Code Online (Sandbox Code Playgroud)
像这样的东西会很好:
> my.vector.with.a.long.name[~ > 5]
[1] 6 7 8 9 10
Run Code Online (Sandbox Code Playgroud)
或者,通过函数索引也很方便:
> my.vector.with.a.long.name[is.even]
[1] 2 4 6 8 10
Run Code Online (Sandbox Code Playgroud)
有没有一个包已经支持这个?
我正在使用faceg_wrap和ggplot创建一个facets图.我的问题是我的方面总是看起来像非常短,非常宽的矩形,但我希望它们是方形的,这样它们更容易理解.理想情况下,我想指定我想要的列数,并让ggplot弄清楚绘图的高度应该是多少,以便所有刻面都是正方形.这可能吗?
我使用data.table的by参数创建了很多列.以下是我将用于说明问题的一些示例数据.
> dt <- data.table(x=runif(10), group=c(1,1,1,1,1,2,2,2,2,2))
> dt
x group
1: 0.0488727 1
2: 0.3087102 1
3: 0.8107115 1
4: 0.7368206 1
5: 0.2941478 1
6: 0.5221693 2
7: 0.2505612 2
8: 0.2730681 2
9: 0.2098595 2
10: 0.4512163 2
Run Code Online (Sandbox Code Playgroud)
我想使用"by"参数为每组数据做一些摘要统计.一种选择是将它们全部分配给以下列中的列dt:
> dt[, max:=max(x), by=group]
> dt[, min:=min(x), by=group]
> dt[, mean:=mean(x), by=group]
> dt[, median:=median(x), by=group]
> dt
x group max min mean median
1: 0.0488727 1 0.8107115 0.0488727 0.4398526 0.3087102
2: 0.3087102 1 0.8107115 0.0488727 0.4398526 …Run Code Online (Sandbox Code Playgroud) 我正在用 ggplot 构建一个图,但我事先不知道 y 列的名称。相反,y 列的名称包含在变量 yname 中。这显然不起作用:
ggplot(df, aes(x=date, y=yname))
Run Code Online (Sandbox Code Playgroud)
因为 ggplot 在 df 中查找字面上名为“yname”的列。如何将 y 列的名称作为变量传递给 ggplot?
r ×9
ggplot2 ×3
python ×3
data.table ×2
apache-spark ×1
apply ×1
facets ×1
file ×1
knitr ×1
mapply ×1
performance ×1
pip ×1
pyspark ×1
r-markdown ×1
scikits ×1