我有一个R脚本,与不同计算机上的多个用户共享.其中一行包含install.packages("xtable")命令.
问题是,每次有人运行脚本时,R都会花费大量时间显然重新安装软件包(实际上确实需要一些时间,因为实际案例中有几个软件包的向量).
如何首先检查软件包是否已安装,然后仅install.packages()针对那些软件包运行?
我在R中创建一个图,我不喜欢由R绘制的x轴值.
例如:
x <- seq(10,200,10)
y <- runif(x)
plot(x,y)
Run Code Online (Sandbox Code Playgroud)
这绘制了一个在X轴上具有以下值的图形:
50, 100, 150, 200
但是,我想将10,20, 30 ... 200存储在变量x中的20个值绘制为X轴值.我已经浏览了无数的博客和简洁的手册 - 经过几个小时的搜索,我最接近发现任何有用的东西是以下(摘要)说明:
plot()或par()指定参数xaxt='n'axis()例如axis(side = 1, at = seq(0, 10, by = 0.1), labels = FALSE, tcl = -0.2)我尝试了它,结果绘图根本没有x轴值.是否有人可以知道如何做到这一点?我无法相信以前没有人试过这样做过.
我正在尝试构建一个R包,以便阅读CRAN上的手册.我可以弄清楚使用导入来加载命名空间中的函数将是在Description文件中使用的最佳选择.添加到描述文件后,我还将其添加到命名空间文件中.我将importFrom添加到具有所需功能的命名空间文件中.
现在,当我在我的包装上运行R CMD检查时,我得到了一个错误
不需要命名空间依赖项:'ggplot2'
更多信息:即使我将包添加到描述文件中的Depends,它们也不会被加载.
请帮忙.
请在下面找到我的描述文件
Package: bigpackage
Type: Package
Title: Some title
Version: 1.0
Date: 2012-10-25
Author: Mayank Bansal
Maintainer: somename
Imports : R(>= 2.15.1), SweaveListingUtils( >=0.5.5),xtable(>=1.7-0),
brew(>=1.0-6), knitr(>=0.8), RHive(>= 0.0-6), ggplot2(>=0.9.2)
, brew, knitr
SystemRequirements : LaTeX(texi2dvi) must be present in the system to
create PDF reports
Description: Some Description
License: file LICENSE
LazyLoad: yes
ByteCompile: true
OS_type : unix
Run Code Online (Sandbox Code Playgroud) 假设我在R中有大型数据集,我只想知道它们中的两个是否相同.当我尝试不同的算法来实现相同的结果时,我经常使用它.例如,假设我们有以下数据集:
df1 <- data.frame(num = 1:5, let = letters[1:5])
df2 <- df1
df3 <- data.frame(num = c(1:5, NA), let = letters[1:6])
df4 <- df3
Run Code Online (Sandbox Code Playgroud)
所以这就是我比较它们的方法:
table(x == y, useNA = 'ifany')
Run Code Online (Sandbox Code Playgroud)
当数据集没有NA时,哪种方法很有用:
> table(df1 == df2, useNA = 'ifany')
TRUE
10
Run Code Online (Sandbox Code Playgroud)
但是,当他们有NA时,不是那么多:
> table(df3 == df4, useNA = 'ifany')
TRUE <NA>
11 1
Run Code Online (Sandbox Code Playgroud)
在这个例子中,很容易将其NA视为不是问题,因为我们知道两个数据帧都是相同的.问题在于NA == <anything>收益率NA,因此每当其中一个数据集有一个数据集时,无论另一个数据集NA在同一个位置上有什么关系,结果总是如此NA.
因此,使用table()比较数据集对我来说似乎并不理想.如何更好地检查两个数据帧是否相同?
PS:注意这不是R的重复- 比较几个数据集,比较R中的2个数据集或 …
给出以下模拟数据:
set.seed(123)
x <- data.frame(let = sample(letters[1:5], 100, replace = T),
num = sample(1:10, 100, replace = T))
y <- subset(x, let != 'a')
Run Code Online (Sandbox Code Playgroud)
创建y$let收益表
a b c d e
0 20 21 22 18
Run Code Online (Sandbox Code Playgroud)
但我不想a再表现出来了.如果我尝试这样做:
levels(y$let) <- factor(y$let)
Run Code Online (Sandbox Code Playgroud)
我弄乱频率,因为现在table(y$let)给了我
b d c e
0 20 21 40
Run Code Online (Sandbox Code Playgroud)
我知道我可以做到xtabs(~ y$let, drop.unused.levels = T)并解决这个问题,但它并没有重置核心的变量级别(这对我很重要,因为这是我对数据集的一个早期改变,它将继续贯穿始终整个分析).而且,这xtabs是一个不同的类table,这将使我在项目后期头痛.
问题是:我如何自动更改,levels(y$let)以便它不显示创建子集时丢弃的级别?在这种情况下,我该如何展示[1] "b" "c" "d" "e"?
假设我有四个样本:id = 1,2,3和4,每个样本都有一个或多个测量值:
> a <- data.frame(id=c(1,1,2,2,3,4), value=c(1,2,3,-4,-5,6))
> a
id value
1 1 1
2 1 2
3 2 3
4 2 -4
5 3 -5
6 4 6
Run Code Online (Sandbox Code Playgroud)
我想删除重复项,每个ID只保留一个条目 - 具有"value"列绝对值最大的条目.即,这就是我想要的:
> a[c(2,4,5,6), ]
id value
2 1 2
4 2 -4
5 3 -5
6 4 6
Run Code Online (Sandbox Code Playgroud)
我怎么能在R中这样做?
如果我想在Python中打印多行文本而不键入print('')每一行,有没有办法做到这一点?我正在将它用于ASCII艺术.
(python 3.5.1)
如果我进入
print(cat(""))
Run Code Online (Sandbox Code Playgroud)
我明白了
NULL
Run Code Online (Sandbox Code Playgroud)
我想用来cat()打印R脚本的进度,但我不明白为什么它会NULL在我所有连接字符串的末尾返回,更重要的是,如何让它停止?
我正在尝试使用数据集的已排序列的索引.我想按一个排序列重新排序整个数据集.
area.sort<-sort(xsample$area1, index.return=TRUE)[2]
Run Code Online (Sandbox Code Playgroud)
输出是一个列表,所以我不能在整个数据集中使用它索引.
Error in xj[i] : invalid subscript type 'list'
Run Code Online (Sandbox Code Playgroud)
有人建议使用unlist但我无法摆脱ix*.有任何想法吗?谢谢
> area.sort<-unlist(area.sort)
ix1 ix2 ix3 ix4 ix5 ix6 ix7 ix8 ix9 ix10 ix11 ix12 ix13
45 96 92 80 53 54 24 21 63 81 40 66 64
Run Code Online (Sandbox Code Playgroud) 我想在我打印的表格下面发表评论,xtable.我认为最好的选择是使用"标题"选项:xtable(tablename, caption="This is a caption").但这是以某种方式自动放入"表1",因此输出如下:
表1:这是一个标题.
是否有任何方法可以抑制这种或任何更简单的方式将注释简单地作为表中的附加最后一行?