我正在创建一个我计划提交给CRAN的R包.如何检查我的任何函数名称是否与CRAN上已有的函数名称冲突?在我的软件包上市之前,更改函数名称仍然很容易,我希望成为一个好公民,尽可能避免冲突.
例如,包MASS和dplyr都具有称为"选择"的功能.我想避免那种碰撞.
这是我在包中使用...
参数并tidyselect
选择变量的函数的简化版本:
# this toy function just selects the ... variables
foo <- function(dat = mtcars, ...){
expr <- rlang::expr(c(...))
cols_to_select <- tidyselect::eval_select(expr, data = dat)
dplyr::select(dat, all_of(cols_to_select))
}
Run Code Online (Sandbox Code Playgroud)
这有效: foo(mtcars, cyl)
但是我的实际函数在参数之前有更多前面的...
参数,所有参数都有默认值。如果我使用这些默认值调用我的函数并将值传递给...
.
这就是我想要的 - 假设dat = mtcars
- 但它不起作用:
foo(... = cyl)
错误:名称不得采用
...
或形式..j
。
我可以修改函数或调用以允许直接指定...
吗?
我创建了一个包含72个元素的R列表.我如何将此文件取消归档到72个具有每个元素名称的单个数据帧?
这是一个例子:
L <- list(data.frame(matrix(1:4,2,2)),
data.frame(matrix(9:12,2,2)),
data.frame(matrix(5:8,2,2)))
names(L)<-c("a","b","c")
Run Code Online (Sandbox Code Playgroud)
如何获得三个数据帧a,b和c?
当我尝试在比我的训练数据更少的因子水平的新测试数据上测试我训练的模型时,predict()
返回以下内容:
新数据中的预测变量类型与训练数据的类型不匹配.
我的训练数据有一个具有7个因子水平的变量,我的测试数据具有6个因子水平的相同变量(训练数据中的所有6个ARE).
当我添加包含"缺失"第7个因子的观察时,模型会运行,所以我不确定为什么会发生这种情况,甚至不知道它背后的逻辑.
我可以看看测试集是否有更多/不同的因子水平,然后randomForest会窒息,但为什么在训练集有"更多"数据的情况下呢?
我正在尝试使用包中的read_excel()
函数打开 Excel 文件readxl
。但我不知道如何指定 Excel 文件的路径。
当我按照答案中给出的步骤输入文件路径时,我收到错误消息:
“错误:std::bad_alloc”。
我正在抓一个网站,并从for-loop调用我的抓取功能.在循环的4,000次迭代中,我的计算机警告我RStudio使用了太多的内存.但是在使用转义键断开循环之后,我在R环境中看不到任何大对象.
我尝试了这两个 帖子的提示,但他们没有透露原因.当我mem_used()
从pryr
包裹打电话时,我得到:
2.3 GB
这与Windows任务管理员最初所说的一致.它表示2.3 GB,然后在循环结束后十分钟内降至1.7 GB,在循环后二十分钟内降至1.2 GB. mem_used()
继续说2.3 GB.
但根据lsos()
上面链接的第一篇文章中的函数,我的R对象很小:
> lsos()
Type Size Rows Columns
all_raw tbl_df 17390736 89485 12
all_clean tbl_df 14693336 89485 15
all_no_PAVs tbl_df 14180576 86050 15
all_no_dupe_names tbl_df 13346256 79646 15
sample_in tbl_df 1917128 9240 15
testdat tbl_df 1188152 5402 15
username_res tbl_df 792936 4091 14
getUserName function 151992 NA NA
dupe_names tbl_df 132040 2802 3
time_per_iteration numeric 65408 4073 NA
Run Code Online (Sandbox Code Playgroud)
这说我最大的对象是17 MB,不接近2.3 GB.我怎样才能找到内存使用的罪魁祸首并修复它?循环中是否存在逐渐占用内存的东西? …
我正在检查我的R包提交CRAN,但有一个注意我无法摆脱.我用谷歌搜索它,但似乎这个注意不常见,因此我没有找到太多有用的信息.任何人都可以为我提供解决方案吗?以下是输出的一部分R CMD check --as-cran
.
* using R version 3.2.0 (2015-04-16)
* using platform: x86_64-apple-darwin13.4.0 (64-bit)
* using session charset: UTF-8
* using option ‘--as-cran’
...
...
* checking DESCRIPTION meta-information ... OK
* checking top-level files ... NOTE
File README.md cannot be checked without ‘pandoc’ being installed.
* checking for left-over files ... OK
* checking index information ... OK
Run Code Online (Sandbox Code Playgroud) 给出如下表:
id value
1 1 a
2 2 a
3 2 b
4 2 c
5 3 c
Run Code Online (Sandbox Code Playgroud)
我想过滤:
a)仅具有值a的id,即id 1.
b)共同包含a和b的id,即id 2.
数据:
data.frame(id = c(1,2,2,2,3), value = c("a", "a", "b", "c", "c"))
Run Code Online (Sandbox Code Playgroud) Tibbles 打印时使用行号作为行名称。请参阅1, 2
下面的左边距:
tibble::as_tibble(mtcars)
# A tibble: 32 x 11
mpg cyl disp hp drat wt qsec vs am gear carb
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 21 6 160 110 3.9 2.62 16.5 0 1 4 4
2 21 6 160 110 3.9 2.88 17.0 0 1 4 4
Run Code Online (Sandbox Code Playgroud)
我可以在争论tibble:::print.tbl()
或其他情况下禁止打印这些数字吗?我知道我可以使用:row.names = FALSE
中的参数,但是我没有得到它作为小标题的所有其他不错的打印选项,它只是像常规 data.frame 一样打印。print.data.frame
print.data.frame(as_tibble(mtcars), row.names = FALSE)
我想保持输出与print.tbl()
上面的输出相同,但没有行号。
当存在包含空间干扰的字符串值时,从打印的data.frame读取文本到data.frame的最简单方法是read.table
什么?例如,此data.frame摘录不会造成问题:
candname party elecVotes
1 BarackObama D 365
2 JohnMcCain R 173
Run Code Online (Sandbox Code Playgroud)
我可以将它粘贴到一个read.table
没有问题的电话中:
dat <- read.table(text = " candname party elecVotes
1 BarackObama D 365
2 JohnMcCain R 173", header = TRUE)
Run Code Online (Sandbox Code Playgroud)
但是如果数据包含带有这样的空格的字符串:
candname party elecVotes
1 Barack Obama D 365
2 John McCain R 173
Run Code Online (Sandbox Code Playgroud)
然后read.table
抛出一个错误,因为它将"Barack"和"Obama"解释为两个独立的变量.