这些天我似乎与共同作者分享了很多代码.他们中的许多人都是初级/中级R用户,并没有意识到他们必须安装他们尚未拥有的软件包.
是否有一种优雅的方式来调用installed.packages()
,将其与我正在加载的那些进行比较并在安装时如果丢失?
为了摆脱a中名为"foo"的列data.frame
,我可以这样做:
df <- df[-grep('foo', colnames(df))]
但是,一旦df
转换为data.table
对象,就无法删除列.
例:
df <- data.frame(id = 1:100, foo = rnorm(100))
df2 <- df[-grep('foo', colnames(df))] # works
df3 <- data.table(df)
df3[-grep('foo', colnames(df3))]
Run Code Online (Sandbox Code Playgroud)
但是一旦它被转换为一个data.table
对象,这就不再适用了.
当我运行R脚本时,我会在另一个桌面上执行其他操作.如果我不经常检查,我永远不知道什么时候完成.有没有办法调用蜂鸣声(如系统蜂鸣声)或让R播放声音或通过脚本末尾的某些代码通知咆哮?
是否可以动态创建新的变量名称?
我想将列表中的数据帧读入最后带数字的新变量.像orca1,orca2,orca3 ......
如果我尝试类似的东西
paste("orca",i,sep="")=list_name[[i]]
Run Code Online (Sandbox Code Playgroud)
我收到这个错误
target of assignment expands to non-language object
Run Code Online (Sandbox Code Playgroud)
还有另一种方法吗?
library(ggplot2)
df <- data.frame(x=1:10, y=rnorm(10))
p1 <- ggplot(df, aes(x,y)) + geom_point()
plist <- list(p1,p1,p1,p1,p1)
# In my real example,a plot function will fit a ggplot to a list of datasets
#and return a list of ggplots like the example above.
Run Code Online (Sandbox Code Playgroud)
我想使用安排地块grid.arrange()
在gridExtra
.
如果图中的数量plist
是可变的,我该怎么做?
这有效:
grid.arrange(plist[[1]],plist[[2]],plist[[3]],plist[[4]],plist[[5]])
但我需要一个更通用的解决方案.想法?
我有一堆csv
文件,我正在读入R并包含在一个包/数据文件夹 .rdata
格式中.不幸的是,数据中的非ASCII字符未通过检查.该tools
软件包有两个功能来检查非ASCII字符(showNonASCII
和showNonASCIIfile
),但我似乎无法找到一个删除/清除它们.
在我探索其他UNIX工具之前,在R中执行此操作会很棒,因此我可以维护从原始数据到最终产品的完整工作流程.是否有任何现有的软件包/函数可以帮助我摆脱非ASCII字符?
我爱的设置.progress = 'text'
在plyr's
llply
.但是,由于列表项被发送到各个核心,然后在最后进行整理,因此我不得不知道沿着mclapply
(从包中multicore
)走多远.
我一直在输出消息,*currently in sim_id # ....*
但这并不是很有帮助,因为它没有给我一个指示列表项的完成百分比的指示(虽然知道我的脚本没有卡住并移动是有帮助的).
有人可以建议其他想法,让我看看我的.Rout
文件,并获得进步感吗?我已经考虑过添加一个手动计数器但是看不清楚我将如何实现它,因为mclapply
必须先完成所有列表项的处理才能给出任何反馈.
所以假设我有一个带有一堆.rdata文件的目录
file_names=as.list(dir(pattern="stock_*"))
[[1]]
[1] "stock_1.rdata"
[[2]]
[1] "stock_2.rdata"
Run Code Online (Sandbox Code Playgroud)
现在,如何通过一次调用加载这些文件?
我总是这样做:
for(i in 1:length(file_names)) load(file_names[[i]])
Run Code Online (Sandbox Code Playgroud)
但为什么我不能这样做do.call(load, file_names)
?我想,没有一个适用的功能会工作,因为他们大多会回到名单,但没有要回来,只是这些文件需要被加载.我无法让这个get
功能在这种情况下工作.想法?
我正在更新一个旧包并缩短了一堆很长的函数名.如何让用户知道旧函数已被弃用?我记录了所有内容roxygen2
所以我想知道#' @alias
我应该使用什么?思考?
我正试图用我的所有plyr
电话来取代dplyr
.还有一些障碍,其中一个是group_by
功能.我想它的行为方式与第二个ddply
参数相同,并根据我列出的分组变量进行拆分,应用和组合.但事实似乎并非如此.这是一个相当简单的例子.
让我们定义一个愚蠢的功能
mm <- function(x) return(x[1:5, ])
Run Code Online (Sandbox Code Playgroud)
现在我们可以iris
像这样分割数据集中的物种并将此函数应用于每个部分.
ddply(iris, .(Species), mm)
Run Code Online (Sandbox Code Playgroud)
这按预期工作.但是,当我尝试相同时dplyr
,它不能按预期工作.
iris %>% group_by(Species) %>% mm
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?