Questions tagged «r»

R是一种免费的开源编程语言和软件环境,用于统计计算,生物信息学,可视化和通用计算。请提供最少且可复制的示例以及所需的输出。使用`dput()`作为数据,并通过`library()`调用指定所有非基本包。不要为数据或代码嵌入图片,而应使用缩进的代码块。对于统计相关的问题,请使用https://stats.stackexchange.com。

6
从data.frames的嵌套列表中提取同名
我有一个嵌套的data.frames列表,获取所有data.frames列名称的最简单方法是什么? 例: d = data.frame(a = 1:3, b = 1:3, c = 1:3) l = list(a = d, list(b = d, c = d)) 结果: $a [1] "a" "b" "c" $b [1] "a" "b" "c" $c [1] "a" "b" "c"
10 r 

3
R:如何在不替换且没有连续相同值的情况下进行采样
我花了整整一天的时间来完成似乎很简单的事情。我必须创建300个“随机”序列,其中数字1,2、3和4都恰好出现12次,但是同一数字永远不会“连续”使用两次。 我最好的尝试是: 有R个样本,其中48个项目没有替换,请使用rle测试是否存在连续值,然后仅使用不包含连续值的序列。问题:几乎没有符合此标准的随机序列,因此要花很长时间。 具有R个创建序列而没有连续值(请参见代码)。 pop<-rep(1:4,12) y=c() while(length(y)!=48) { y= c(y,sample(pop,48-length(y),replace=F)) y=y[!c(FALSE, diff(y) == 0)] } 问题:这将创建每个值具有不同数量的序列。然后,我尝试仅使用每个值正好为12的那些序列,但这仅使我回到问题1:花了很长时间。 必须有一些简单的方法来执行此操作,对吗?任何帮助是极大的赞赏!
10 r  sample 

2
为什么对同一个向量的两个引用为向量的每个元素返回不同的内存地址?
我正在学习R,目前正在读这本书。为了确保我理解这个概念,我进行了以下测试,结果对我来说很困惑,如果您能澄清一下,我将不胜感激。这是测试,我直接从终端在R Shell中运行(不使用RStudio或Emacs ESS)。 > library(lobstr) > > x <- c(1500,2400,8800) > y <- x > ### So the following two lines must return the same memory address > obj_addr(x) [1] "0xb23bc50" > obj_addr(y) [1] "0xb23bc50" > ### So as I expected, indeed both x and y point to the same …
9 r 

1
在lm公式中删除变量仍会触发对比度误差
我试图仅对数据的一部分运行lm(),并遇到问题。 dt = data.table(y = rnorm(100), x1 = rnorm(100), x2 = rnorm(100), x3 = as.factor(c(rep('men',50), rep('women',50)))) # sample data lm( y ~ ., dt) # Use all x: Works lm( y ~ ., dt[x3 == 'men']) # Use all x, limit to men: doesn't work (as expected) 上面的方法不起作用,因为数据集现在只有人,因此我们不能在模型中包括性别变量x3。但... lm( y …
9 r  formula  lm  factors 

2
如何在不自动增加文件大小的情况下并行保存文件?
我有两个完全相同的脚本。 但是一个脚本正在生成3个重82.7 KB的RData文件,另一个脚本正在创建3个重120 KB的RData文件。 第一个没有并行: library("plyr") ddply(.data = iris, .variables = "Species", ##.parallel=TRUE,##Without parallel .fun = function(SpeciesData){ #Create Simple Model ------------------------------------------------------------- Model <- lm(formula = "Sepal.Length~Sepal.Width+Petal.Length+Petal.Width",data = SpeciesData) #Save The Model ------------------------------------------------------------- save(Model, compress = FALSE, file = gsub(x = "Species.RData", pattern = "Species", replacement = unique(SpeciesData$Species))) }) 第二个是并行的: library("plyr") …
9 r  plyr 

1
R中GIS地图的自动标签放置
我正在R中使用sf软件包(和相关软件包)读取shapefile,并ggplot2(和朋友)进行绘图,从而制作GIS地图。效果很好,但是我找不到方法(自动/编程)为河流和道路等要素创建标签位置。这些特征通常是线串,形状不规则。参见所附图片,例如来自wikimedia的图片。 该ggrepel软件包可以自动标记点,效果很好,但是对于不是离散纬度/经度点的其他地理特征来说,这没有多大意义。 我可以想象通过在每个功能上单独放置单独的文本标签来做到这一点,但是我正在寻找更自动化的方法(如果可能)。我意识到这样的自动化不是一个小问题,但是它已经得到了解决(ArcGIS显然可以通过名为maplex的扩展来做到这一点,但是我无权使用该软件,因此我想继续R(如果可能)。 有人知道这样做的方法吗? MWE在这里: #MWE Linestring labeling library(tidyverse) library(sf) library(ggrepel) set.seed(120) #pick a county from the built-in North Carolina dataset BuncombeCounty <- st_read(system.file("shapes/", package="maptools"), "sids") %>% filter(NAME == "Buncombe") #pick 4 random points in that county pts_sf <- data.frame( x = seq(-82.3, -82.7, by=-0.1) %>% sample(4), y = seq(35.5, …
9 r  gis  spatial  sf  ggrepel 

2
简洁地显示几个代码块
我正在创建一个博客,blogdown用于比较R中的代码和Stata中的代码。我想显示两个代码,以便用户可以比较在R和Stata中的执行情况。Howewer,将两个或更多的块连续放置(R的代码,Stata +输出的代码)使阅读非常不舒服。 我想到了几个布局,其中包括几个块,但我不知道它们是否已实现,或者是否有可能实现。 有一个按钮来显示/隐藏块(每个块一个按钮) 一种想法是: 本文默认显示的R代码​​块, 默认情况下,Stata代码块不可见,但如果用户单击按钮,则可见 此人与这个人成功地折叠在blogdown他们的代码块,但显然它在默认情况下隐藏或显示每个块。默认情况下,我如何只隐藏一些块?是否有一个选项(如options eval,echo...)隐藏或显示代码块blogdown? 有“标签”的块 这部分的标题说明了一切:是否可以将标签页放在一个块中,以便我们可以从一种代码切换到另一种代码(例如,就像Web浏览器中的标签页一样)? 并排显示两个块 在某些blogdown主题(也许我不知道)中,宽度已大大减小,并且两侧有一些未使用的空间。因此,是否可以增加商品某些部分的宽度并并排显示两个块? 任何想法是否可以实现这些布局之一blogdown?
9 r  blogdown 

5
正则表达式删除R中的前导零,除非最终(或唯一)字符为零
gsub("(?<![0-9])0+", "", c("005", "0AB", "000", "0"), perl = TRUE) #> [1] "5" "AB" "" "" gsub("(^|[^0-9])0+", "\\1", c("005", "0AB", "000", "0"), perl = TRUE) #> [1] "5" "AB" "" "" 上面的正则表达式来自此SO线程,它说明了如何从R中的字符串中删除所有前导零。由于此正则表达式,“ 000”和“ 0”都转换为“”。相反,我想从字符串中删除所有前导零,但最终字符恰好为零或唯一字符为零的情况除外。 "005" would become "5" "0AB" would become "AB" "000" would become "0" "0" would become "0" 另一个SO线程解释了如何做我想做的事情,但是我认为我在使用R中的解决方案时语法不是很正确。而且我不太了解下面第一和第二解决方案之间的区别(如果他们确实有效)。 …
9 r  regex  string  gsub  stringr 

1
如何使用tempdisagg软件包中的td命令将每月数据分解为每日数据频率?
我有一个每月频率数据,试图将其分解为每日频率数据。所以我使用下面的代码td从tempdisaggR中的包中使用命令: dat=ts(data[,2]) result=td(dat~1, conversion = "average", to = "day", method = "chow-lin-maxlog") 然后我收到以下错误消息: Error in td(dat ~ 1, conversion = "average", to = "day", method = "chow-lin-maxlog") : 'to' argument: unknown character string 我使用的数据dat如下: > dput(head(dat)) c(82.47703009, 84.63094431, 70.00659987, 78.81135651, 74.749746,82.95638213) 因此,尽管此数据dat以每月频率显示,但开始和结束尚未反映出来。实际上,开始日期是1/1997,结束日期是9/2019。 在将此月度数据dat分解为每日频率数据方面,我可以得到帮助吗?

1
从Rcpp函数返回指向`new`对象的指针的正确方法
考虑1)具有潜在的大内存打印的自定义类,以及2)执行一些预处理,然后创建并返回我们的自定义类的新对象的顶级函数。为避免不必要的值复制,该函数分配对象并返回指向它的指针。 根据前面的讨论,似乎将指针返回到新创建的对象的正确方法是将其包装为Rcpp::XPtr<>。然而,R则认为它有效的externalptr,而我在努力寻找与现代投它的正确方法RCPP_EXPOSED_CLASS和RCPP_MODULE做事的方式。 另一种方法是返回原始指针。但是,我不能100%地确定对象内存是否已正确清理。我跑去valgrind测试内存泄漏,但没有发现任何泄漏。但是,谁清理呢?R? 测试文件 #include <Rcpp.h> // Custom class class Double { public: Double( double v ) : value(v) {} double square() {return value*value;} private: double value; }; // Make the class visible RCPP_EXPOSED_CLASS(Double) // Option 1: returning raw pointer Double* makeDouble( double x ) { Double* pd = new …
9 c++  r  rcpp 

1
更新R后,RcppArmadillo的sample()不明确
我通常使用一个简短的Rcpp函数作为输入矩阵,其中每行包含K个合计为1的概率。然后,该函数为每行随机采样1到K之间与提供的概率相对应的整数。这是功能: // [[Rcpp::depends(RcppArmadillo)]] #include <RcppArmadilloExtensions/sample.h> using namespace Rcpp; // [[Rcpp::export]] IntegerVector sample_matrix(NumericMatrix x, IntegerVector choice_set) { int n = x.nrow(); IntegerVector result(n); for ( int i = 0; i < n; ++i ) { result[i] = RcppArmadillo::sample(choice_set, 1, false, x(i, _))[0]; } return result; } 我最近更新了R和所有软件包。现在,我无法再编译此函数。我不清楚原因。跑步 library(Rcpp) library(RcppArmadillo) Rcpp::sourceCpp("sample_matrix.cpp") 引发以下错误: …
9 r  rcpp  rcpparmadillo 

6
匹配和删除重复的字符:替换多个(3+)非连续出现的字符
我正在寻找一个regex与每个字符的第三,第四,...匹配的模式。请看下面的说明: 例如,我有以下字符串: 111aabbccxccybbzaa1 我想在第二次出现后替换所有重复的字符。输出将是: 11-aabbccx--y--z--- 到目前为止,我尝试过一些正则表达式模式: 使用以下正则表达式,我可以找到每个字符的最后一次出现: (.)(?=.*\1) 或使用此方法,我可以将其用于连续重复,但不能重复: ([a-zA-Z1-9])\1{2,}
9 python  r  regex  string 

4
有没有更快的方法来检查列表中的列表是否等效?
在这里,我有1:7四个不同分区(即{1},{2,3,4},{5,6}和{7})的整数,这些分区写在一个列表中,即list(1,c(2,3,4),c(5,6),7)。我将分区视为集合,这样一个分区内元素的不同排列应被视为同一分区。例如,list(1,c(2,3,4),c(5,6),7)和list(7,1,c(2,3,4),c(6,5))是等效的。 注意,列表中的元素没有重复,例如no list(c(1,2),c(2,1),c(1,2)),因为这个问题正在讨论整个集合的互斥分区。 我在列表中列出了一些不同的排列lst,如下所示 lst <- list(list(1,c(2,3,4),c(5,6),7), list(c(2,3,4),1,7,c(5,6)), list(1,c(2,3,4),7,c(6,5)), list(7,1,c(3,2,4),c(5,6))) 我想做的就是验证所有排列是否相等。如果是,那么我们得到结果TRUE。 到目前为止,我所做的是对每个分区中的元素进行排序,并setdiff()与之一起使用interset()并对其union()进行判断(请参见下面的代码) s <- Map(function(v) Map(sort,v),lst) equivalent <- length(setdiff(Reduce(union,s),Reduce(intersect,s),))==0 但是,我估计每当分区大小扩大时,此方法都将很慢。有什么更快的方法可以做到吗?预先赞赏! 一些测试用例(小数据) # should return `TRUE` lst1 <- list(list(1,c(2,3,4),c(5,6)), list(c(2,3,4),1,c(5,6)), list(1,c(2,3,4),c(6,5))) # should return `TRUE` lst2 <- list(list(1:2, 3:4), list(3:4, 1:2)) # should return `FALSE` lst3 <- list(list(1,c(2,3,4),c(5,6)), list(c(2,3,4),1,c(5,6)), list(1,c(2,3,5),c(6,4)))

1
替代deparse()的更快方法
我维护一个依赖于重复调用的程序包deparse(control = c("keepNA", "keepInteger"))。control始终相同,并且表达式也有所不同。deparse()似乎花了很多时间重复解释与相同的选项.deparseOpts()。 microbenchmark::microbenchmark( a = deparse(identity, control = c("keepNA", "keepInteger")), b = .deparseOpts(c("keepNA", "keepInteger")) ) # Unit: microseconds # expr min lq mean median uq max neval # a 7.2 7.4 8.020 7.5 7.6 55.1 100 # b 3.0 3.2 3.387 3.4 3.5 6.0 100 在某些系统上,冗余.deparseOpts()调用实际上占用了deparse()(火焰图)的大部分运行时间。 我真的很想只调用.deparseOpts()一次,然后将数字代码提供给deparse(),但是如果不.Internal()直接调用或调用C代码,这似乎是不可能的,从软件包开发的角度来看,这两种方法都不是最佳选择。 deparse …
9 r 

3
我无法在data.table中使用dtplyr做什么
我应该投资我对数据中的R扯皮,尤其具有学习努力dplyr,dtplyr和data.table? 我dplyr主要使用数据,但是当数据太大而无法使用时data.table,这种情况很少发生。因此,现在dtplyrv1.0已成为的接口data.table,从表面上看,我似乎再也不需要担心使用该data.table接口。 那么什么是最有用的特性或方面data.table是不能被使用做dtplyr的那一刻,那可能永远不会有做dtplyr? 从表面上看,dplyr借助的好处,data.table它听起来像dtplyr会超越dplyr。会不会有任何理由来使用dplyr,一旦dtplyr已经完全成熟? 注意:我不是在问dplyrvs data.table(就像在data.table vs dplyr中:一个人可以做得很好而另一个不能做得不好或做得不好吗?),但是鉴于在一个特定问题上一个人比另一个人更受青睐,为什么呢?牛逼dtplyr是使用工具。
9 r  dplyr  data.table  dtplyr 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.