我试图找到一种简单的方法来使用像R中的Perl的散列函数(基本上是缓存),因为我打算进行Perl风格的散列并编写我自己的计算备忘录.然而,其他人已经打败了我,并有包装备忘.我越挖,越我发现,如memoise
和R.cache
,但差异不容易明确.另外,目前还不清楚如何使用Perl风格的哈希(或Python风格的词典)并编写一个自己的memoization,而不是使用hash
包,这似乎不是两个memoization包的基础.
由于我无法找到有关CRAN或其他地方的信息来区分选项,或许这应该是关于SO的社区维基问题:R中的记忆和缓存有哪些选项,它们的区别是什么?
作为比较的基础,这里是我找到的选项列表.此外,在我看来,所有都依赖于散列,所以我也会注意到散列选项.密钥/值存储在某种程度上是相关的,但是会打开关于数据库系统的大量蠕虫(例如BerkeleyDB,Redis,MemcacheDB和其他许多人).
它看起来像是:
这些是R对象外部存储的基本选项.
cacher
并提供一些有用功能的OmegaHat项目.pairlist
,但已被弃用.)虽然我最感兴趣的是了解选项,但我有两个基本用例:
这些真的出现了,因为我正在深入研究一些slooooow代码的分析,我真的只想计算简单的字符串,看看我是否可以通过memoization加速一些计算.能够散列输入值,即使我没有记忆,也会让我看看memoization是否有帮助.
注1:可重复研究的CRAN任务视图列出了几个软件包(cacher
和R.cache
),但没有详细说明使用选项.
注2:为了帮助其他人查找相关代码,这里有一些关于一些作者或包的注释.一些作者使用SO.:)
我有一个网格化数据集,可在以下位置获得数据:
lon <- seq(-179.75,179.75, by = 0.5)
lat <- seq(-89.75,89.75, by = 0.5)
Run Code Online (Sandbox Code Playgroud)
我想找到位于该位置500公里范围内的所有数据点:
mylat <- 47.9625
mylon <- -87.0431
Run Code Online (Sandbox Code Playgroud)
我的目标是在R中使用geosphere包,但我目前编写的方法效率似乎不高:
require(geosphere)
dd2 <- array(dim = c(length(lon),length(lat)))
for(i in 1:length(lon)){
for(ii in 1:length(lat)){
clon <- lon[i]
clat <- lat[ii]
dd <- as.numeric(distm(c(mylon, mylat), c(clon, clat), fun = distHaversine))
dd2[i,ii] <- dd <= 500000
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,我循环遍历数据中的每个网格,并查找距离是否小于500 km.然后我存储一个TRUE或FALSE变量,然后我可以使用它来平均数据(其他变量).从这个方法,我想要一个TRUE或FALSE的矩阵,用于距离lat和lon 500公里范围内的位置.有没有更有效的方法来做到这一点?
我正在处理来自mothur的稀疏输出,它基本上给我一个数据集,其中包含采样的序列数和几个样本中的唯一序列数.我想使用ggplot2来可视化这些数据,因此需要使用melt
从a wide
到long
格式.
问题是我发现由于错误导致无法完成这项工作melt
.这基本上说明了
错误:数据中找不到id变量:1,3,6,(...等等)
由于原始数据集的大小,在此处共享它将是不切实际的,但是应该能够使用以下代码重新创建相同的问题:
a<-seq(0,300,3)
b<-runif(length(a))
c<-runif(length(a))
d<-as.data.frame(cbind(a,b,c))
d$a<-as.factor(d$a)
melt(d,d$a)
Run Code Online (Sandbox Code Playgroud)
这给出了完全相同的错误:
错误:数据中找不到id变量:0,3,6,9,(...)
我没有看到我做错了什么.我在ubuntu服务器12.04上使用R 2.15.1.功能reshape::melt
和reshape2::melt
结果都是相同的错误.
我有一些关于purrr :: pmap的问题,可以在nested.data.frame中制作多个ggplot图.
我可以通过使用purrr :: map2在代码下运行而没有问题,我可以在nested.data.frame中创建多个图(2个图).
作为一个例子,我在R中使用了虹膜数据集.
library(tidyverse)
iris0 <- iris
iris0 <-
iris0 %>%
group_by(Species) %>%
nest() %>%
mutate(gg1 = purrr::map(data, ~ ggplot(., aes(Sepal.Length, Sepal.Width)) + geom_point())) %>%
mutate(gg2 = purrr::map(data, ~ ggplot(., aes(Sepal.Length, Petal.Width)) + geom_point())) %>%
mutate(g = purrr::map2(gg1, gg2, ~ gridExtra::grid.arrange(.x, .y)))
Run Code Online (Sandbox Code Playgroud)
但是,当我想绘制超过2个图时,我无法解决使用purrr :: pmap,如下面的代码.
iris0 <-
iris0 %>%
group_by(Species) %>%
nest() %>%
mutate(gg1 = purrr::map(data, ~ ggplot(., aes(Sepal.Length, Sepal.Width)) + geom_point())) %>%
mutate(gg2 = purrr::map(data, ~ ggplot(., aes(Sepal.Length, Petal.Width)) + geom_point())) %>%
mutate(gg3 = purrr::map(data, …
Run Code Online (Sandbox Code Playgroud) 我有一个包含分类(名义和序数)和数字属性的数据集.我想使用这些混合属性在我的观察中计算(dis)相似性矩阵.使用R中集群包的daisy()函数,我可以很容易地获得如下的相异矩阵:
if(!require("cluster")) { install.packages("cluster"); require("cluster") }
data(flower)
as.matrix(daisy(flower, metric = "gower"))
Run Code Online (Sandbox Code Playgroud)
这使用gower度量来处理名义变量.是否有一个Python相当于daisy()
R 中的函数?
或者也许任何其他模块函数允许使用Gower指标或类似的东西计算具有混合(名义,数字)属性的数据集的(dis)相似性矩阵?
我是R的新手,我试图访问互联网上的一些信息,但我遇到了似乎没有关闭的连接问题.如果有人在这里给我一些建议,我将非常感激...
最初我想使用WebChem软件包,理论上可以提供我想要的所有内容,但是当网页中缺少某些输出数据时,WebChem不会从该页面返回任何数据.为了解决这个问题,我已经从包中获取了大部分代码,但稍微改了一下以满足我的需求.这工作得很好,关于第150个惯例,但现在,我虽然什么都没有改变,当我使用命令read_html,我得到的警告信息"关闭不使用的连接4(HTTP:......"虽然这只是一条警告消息,read_html在生成此警告后不返回任何内容.
我写了一个简化的代码,如下所示.这有同样的问题
完全关闭R(甚至重新启动我的电脑)似乎没有什么区别 - 第二次使用代码时会出现警告消息.我可以一次一个地运行查询,在循环之外没有问题,但是一旦我尝试使用循环,错误就会在第二次迭代时再次发生.我试图矢量化代码,并再次返回相同的错误消息.我尝试了showConnections(all = TRUE),但只有stdin,stdout,stderr的连接0-2.我试图找到关闭html连接的方法,但是我不能将url定义为con,而close(qurl)和close(ttt)也不起作用.(返回应用于类"字符"对象的'close'没有适用方法的错误,并且没有适用于类'c('xml_document','xml_node')的对象的'close'的适用方法",分别)
有没有人知道关闭这些连接的方法,这样他们就不会破坏我的日常工作?任何建议都会非常受欢迎.谢谢!
PS:我正在使用R版本3.3.0和RStudio版本0.99.902.
CasNrs <- c("630-08-0","463-49-0","194-59-2","86-74-8","148-79-8")
tit = character()
for (i in 1:length(CasNrs)){
CurrCasNr <- as.character(CasNrs[i])
baseurl <- 'http://chem.sis.nlm.nih.gov/chemidplus/rn/'
qurl <- paste0(baseurl, CurrCasNr, '?DT_START_ROW=0&DT_ROWS_PER_PAGE=50')
ttt <- try(read_html(qurl), silent = TRUE)
tit[i] <- xml_text(xml_find_all(ttt, "//head/title"))
}
Run Code Online (Sandbox Code Playgroud) 我在R Riverplot中制作了一个Sankey图(v0.5),在RStudio中输出看起来很小,但是当导出或放大时,颜色有黑色轮廓或网格线.
我想这可能是因为形状的轮廓与我想用于填充的透明度不匹配?
我可能需要找到一种方法来完全摆脱轮廓(而不是让它们半透明),因为我认为它们也是为什么值为零的流仍然显示为细线的原因.
我的代码在这里:
#loading packages
library(readr)
library("riverplot", lib.loc="C:/Program Files/R/R-3.3.2/library")
library(RColorBrewer)
#loaing data
Cambs_flows <- read_csv("~/RProjects/Cambs_flows4.csv")
#defining the edges
edges = rep(Cambs_flows, col.names = c("N1","N2","Value"))
edges <- data.frame(edges)
edges$ID <- 1:25
#defining the nodes
nodes <- data.frame(ID = c("Cambridge","S Cambs","Rest of E","Rest of UK","Abroad","to Cambridge","to S Cambs","to Rest of E","to Rest of UK","to Abroad"))
nodes$x = c(1,1,1,1,1,2,2,2,2,2)
nodes$y = c(1,2,3,4,5,1,2,3,4,5)
#picking colours
palette = paste0(brewer.pal(5, "Set1"), "90")
#plot styles
styles = lapply(nodes$y, function(n) {
list(col = palette[n], lty = …
Run Code Online (Sandbox Code Playgroud) 我有一个玩具的例子.对由x组成的两个连续y行进行求和的最有效方法是什么
library(tibble)
l = list(x = c("a", "b", "a", "b", "a", "b"), y = c(1, 4, 3, 3, 7, 0))
df <- as_tibble(l)
df
#> # A tibble: 6 x 2
#> x y
#> <chr> <dbl>
#> 1 a 1
#> 2 b 4
#> 3 a 3
#> 4 b 3
#> 5 a 7
#> 6 b 0
Run Code Online (Sandbox Code Playgroud)
所以输出就是这样的
group sum seq
a 4 1
a 10 2
b 7 1
b 3 2
Run Code Online (Sandbox Code Playgroud)
我想使用RcppRoll包中的tidyverse和可能的roll_sum()并使用代码,以便可变长度的连续行可以用于真实世界数据,其中会有很多组
TIA
我试图将数据框中的每个单元格除以列的总和。例如,我有一个数据框 df:
sample a b c
a2 1 4 6
a3 5 5 4
Run Code Online (Sandbox Code Playgroud)
我想创建一个新的数据框,将每个单元格放入并除以列的总和,如下所示:
sample a b c
a2 .167 .444 .6
a3 .833 .556 .4
Run Code Online (Sandbox Code Playgroud)
我已经使用sweep() 看到了答案,但这看起来像是用于矩阵,而且我有数据框。我了解如何使用 colSums(),但我不确定如何编写一个函数来循环遍历列中的每个单元格,然后除以列总和。谢谢您的帮助!
今天我已经意识到包装中的silhouette
图形cluster
无法正确显示RStudio
.Google搜索显示其他人遇到此问题:
http://support.rstudio.org/help/discussions/problems/3094-plotsnot-showing-up-in-r-studio
作为R的新手,我不清楚这个问题是否已在这个问题得到解决!所以我的问题是:有没有办法让silhouette
情节正确显示RStudio
?
谢谢你的帮助.
示例脚本:
library(cluster)
data(xclara)
km <- kmeans(xclara,3)
dissE <- daisy(xclara)
sk <- silhouette(km$cl, dissE)
plot(sk)
Run Code Online (Sandbox Code Playgroud)