小编Sim*_*lon的帖子

为什么NaN ^ 0 == 1

由早期代码打高尔夫提示为什么会:

>NaN^0
[1] 1
Run Code Online (Sandbox Code Playgroud)

它非常有意义的NA^0是1,因为NA丢失数据,以及任何升至0号将为1,包括-InfInf.但是NaN应该代表非数字,为什么会这样呢?当?NaN州的帮助页面时,这更令人困惑/担忧:

在R中,基本上所有数学函数(包括基本算术)都应该与+/- Inf和NaN一起作为输入或输出正常工作.

基本规则应该是呼叫和与Infs的关系确实是具有适当数学限制的陈述.

涉及NaN的计算将返回NaN或NA:这两者中的哪一个不能保证并且可能依赖于R平台(因为编译器可能重新排序计算).

这背后有一个哲学原因,还是仅仅与R代表这些常数有关?

math r arithmetic-expressions

64
推荐指数
4
解决办法
2602
查看次数

了解如何在R中处理.Internal C函数

我想知道是否有人可以向我说明R如何C从控制台提示符下键入的R命令执行调用.我R对a)函数参数的处理和b)函数调用本身特别困惑.

在这种情况下,我们举一个例子set.seed().想知道它是如何工作我在提示符下键入名称,获得源(看看这里的更多介绍),看到有最后一个.Internal(set.seed(seed, i.knd, normal.kind),所以尽职尽责地在查找相关的函数名.Internals的部分/src/names.c,发现它被称为do_setseed是在RNG.c哪导致我......

SEXP attribute_hidden do_setseed (SEXP call, SEXP op, SEXP args, SEXP env)
{
    SEXP skind, nkind;
    int seed;

    checkArity(op, args);
    if(!isNull(CAR(args))) {
    seed = asInteger(CAR(args));
    if (seed == NA_INTEGER)
        error(_("supplied seed is not a valid integer"));
    } else seed = TimeToSeed();
    skind = CADR(args);
    nkind = CADDR(args);
    //...
      //DO RNG here 
    //...
    return R_NilValue;
}
Run Code Online (Sandbox Code Playgroud)
  • 什么是CAR,CADR …

c syntax r internals

39
推荐指数
2
解决办法
1437
查看次数

为什么不能在断言后面的零宽度中使用重复量词

我一直认为你不能在零宽度断言中使用重复量词(Perl Compatible Regular Expressions [PCRE]).但是,最近我发现你可以在前瞻断言中使用它们.

所以我的问题是:

PCRE正则表达式引擎在使用零宽度外观搜索时如何工作,从而无法使用重复量词?

以下是R中PCRE的一个简单示例:

# Our string
x <- 'MaaabcccM'

##  Does it contain a 'b', preceeded by an 'a' and followed by zero or more 'c',
##  then an 'M'?
grepl( '(?<=a)b(?=c*M)' , x , perl=T )
# [1] TRUE

##  Does it contain a 'b': (1) preceeded by an 'M' and then zero or more 'a' and
##                         (2) followed by zero or more 'c' then an 'M'?
grepl( '(?<=Ma*)b(?=c*M)' , x …
Run Code Online (Sandbox Code Playgroud)

regex pcre r

33
推荐指数
2
解决办法
6844
查看次数

为什么R会使用"L"后缀来表示整数?

在R中我们都知道,对于那些我们想要确保处理整数以使用"L"后缀来指定它的方式来说这很方便:

1L
# [1] 1
Run Code Online (Sandbox Code Playgroud)

如果我们没有明确告诉R我们想要一个整数,它会假设我们打算使用numeric数据类型......

str( 1 * 1 )
# num 1
str( 1L * 1L )
# int 1
Run Code Online (Sandbox Code Playgroud)

为什么"L"是首选后缀,为什么不是"我"呢?有历史原因吗?

另外,为什么R允许我做(有警告):

str(1.0L)
# int 1
# Warning message:
# integer literal 1.0L contains unnecessary decimal point 
Run Code Online (Sandbox Code Playgroud)

但不是..

str(1.1L)
# num 1.1
#Warning message:
#integer literal 1.1L contains decimal; using numeric value 
Run Code Online (Sandbox Code Playgroud)

我希望两者都返回一个错误.

parsing integer r semantics

32
推荐指数
2
解决办法
2万
查看次数

在R中为什么阶乘(100)与prod(1:100)显示不同?

在RI我发现了一些我无法解释的奇怪行为,我希望有人在这里.我相信100的价值!这是一个很大的数字.

控制台的几行显示预期的行为......

>factorial( 10 )
[1] 3628800
>prod( 1:10 )
[1] 3628800
> prod( as.double(1:10) )
[1] 3628800
> cumprod( 1:10 )
[1]       1       2       6      24     120     720    5040   40320  362880 3628800
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试100!我明白了(注意结果数字在14位左右开始有所不同):

> options(scipen=200) #set so the whole number shows in the output
> factorial(100)
[1] 93326215443942248650123855988187884417589065162466533279019703073787172439798159584162769794613566466294295348586598751018383869128892469242002299597101203456
> prod(1:100)
[1] 93326215443944102188325606108575267240944254854960571509166910400407995064242937148632694030450512898042989296944474898258737204311236641477561877016501813248
> prod( as.double(1:100) )
[1] 93326215443944150965646704795953882578400970373184098831012889540582227238570431295066113089288327277825849664006524270554535976289719382852181865895959724032
> all.equal( prod(1:100) , factorial(100) , prod( as.double(1:100) ) )
[1] TRUE
Run Code Online (Sandbox Code Playgroud)

如果我对一个设置为'已知'数字100的变量进行一些测试!然后我看到以下内容:

# This is (as far as …
Run Code Online (Sandbox Code Playgroud)

math r arithmetic-expressions factorial

22
推荐指数
3
解决办法
5898
查看次数

ggplot2:设置alpha值时,栅格绘图无法按预期工作

第一篇文章,我希望我观察网站礼仪.我无法在网站上找到并回答,我之前将其发布到ggplot2特定组,但尚无解决方案.

基本上我试图使用ggplot2覆盖两个栅格,并要求顶部的半透明.我有一个hillShade栅格,它是根据高程数据栅格计算的,我希望将高程栅格叠加到山体阴影栅格上,这样得到的图形看起来不是"平坦的".您可以在下面的可重现的R代码中看到我的意思.

使用基本图形我可以实现所需的结果,我在下面的代码中包含了一个示例,以明确我的意思,但我需要在ggplot2中执行此操作.

我不能让它在ggplot2中工作.结合光栅使得颜色变得有趣(我可以自己绘制每个颜色).任何人都可以帮助或指出我正确的方向.下面包含自包含,可重现的代码示例.(抱歉这个长度,但我想更清楚).

#   Load relevant libraries
library(ggplot2)
library(raster)


#   Download sample raster data of Ghana from my Dropbox
oldwd <- getwd()
tmp <- tempdir()
setwd(tmp)
url1 <- "http://dl.dropbox.com/s/xp4xsrjn3vb5mn5/GHA_HS.asc"
url2 <- "http://dl.dropbox.com/s/gh7gzou9711n5q7/GHA_DEM.asc"
f1 <- file.path(tmp,"GHA_HS.asc")
f2 <- file.path(tmp,"GHA_DEM.asc")
download.file(url1,f1)  #File is ~ 5,655Kb
download.file(url2,f2)  #File is ~ 2,645Kb


#   Create rasters from downloaded files
hs <-  raster(f1)
dem <- raster(f2)


#   Plot with base graphics to show desired output
plot(hs,col=grey(1:100/100),legend=F)
plot(dem,col=rainbow(100),alpha=0.4,add=T,legend=F)


#   Convert rasters TO dataframes for plotting with …
Run Code Online (Sandbox Code Playgroud)

graphics plot r raster ggplot2

15
推荐指数
2
解决办法
8281
查看次数

使用Xcode 5.0和Rcpp时出错(安装了命令行工具)

我有一个新的iMac,我正在尝试使用Rcpp库运行代码,该库一直在我的旧iMac和Macbook Pro上运行而没有问题.我已经尝试了一些我似乎无法弄清问题是什么.

Xcode 5.0已下载.然后安装命令行工具.已安装R3.0.2.我下载了一个gcc编译器.当我在终端输入gcc时 - 我得到"clang:" - 这很好,我想.

我得到的错误复制如下.提前感谢任何想法和建议.

Error (in R console):
llvm-g++-4.2 -arch x86_64 -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG  -I/usr/local/include  -I"/Library/Frameworks/R.framework/Versions/3.0/Resources/library/Rcpp/include"    -fPIC  -mtune=core2 -g -O2  -c SBM-Ccode.cpp -o SBM-Ccode.o 
Error in sourceCpp("SBM-Ccode.cpp") : 
  Error 1 occurred building shared library.

WARNING: The tools required to build C++ code for R were not found.

Please install Command Line Tools for XCode (or equivalent).

/bin/sh: llvm-g++-4.2: command not found
make: *** [SBM-Ccode.o] Error 127
Run Code Online (Sandbox Code Playgroud)

macos xcode r rcpp

15
推荐指数
3
解决办法
9713
查看次数

strsplit与gregexpr不一致

注释对我的回答这个问题,应该使用得到期望的结果strsplit没有,即使它似乎在一个字符向量正确匹配的第一个和最后逗号.这可以使用gregexpr和证明regmatches.

那么为什么strsplit在这个例子中对每个逗号进行拆分,即使regmatches只返回同一个正则表达式的两个匹配?

#  We would like to split on the first comma and
#  the last comma (positions 4 and 13 in this string)
x <- "123,34,56,78,90"

#  Splits on every comma. Must be wrong.
strsplit( x , '^\\w+\\K,|,(?=\\w+$)' , perl = TRUE )[[1]]
#[1] "123" "34"  "56"  "78"  "90" 


#  Ok. Let's check the positions of matches for this regex …
Run Code Online (Sandbox Code Playgroud)

regex pcre r strsplit

13
推荐指数
1
解决办法
224
查看次数

为什么需要两个随机偏差来确保使用sample()对大整数进行均匀采样?

鉴于以下是等价的,我们可以推断R使用相同的C runif函数来生成sample()runif()...的均匀样本

set.seed(1)
sample(1000,10,replace=TRUE)
#[1] 27 38 58 91 21 90 95 67 63  7

set.seed(1)
ceiling( runif(10) * 1000 )
#[1] 27 38 58 91 21 90 95 67 63  7
Run Code Online (Sandbox Code Playgroud)

但是在处理大数字时,它们并不相同(n > 2^32 - 1):

set.seed(1)
ceiling( runif(1e1) * as.numeric(10^12) )
#[1] 265508663143 372123899637 572853363352 908207789995 201681931038 898389684968
#[7] 944675268606 660797792487 629114043899  61786270468

set.seed(1)
sample( as.numeric(10^12) , 1e1 , replace = TRUE )
#[1] 2655086629 5728533837 2016819388 9446752865 6291140337 2059745544 6870228465 …
Run Code Online (Sandbox Code Playgroud)

random r internals prng

11
推荐指数
1
解决办法
300
查看次数

在同一ggplot中绘制离散和连续的比例

我想使用ggplot2绘制一些不同的数据项,使用两个不同的色标(一个连续和一个离散来自两个不同的df).我可以准确地描绘出我个人喜欢的方式,但我不能让它们一起工作.看起来你不能在同一个情节中运行两种不同的色标吗?我在这里这里看到过类似的问题,这让我相信我想要实现的目标在ggplot2中是不可能的,但是如果我错了,我想说明我的问题,看看是否有变通.

我有一些GIS流数据,附有一些分类属性,我可以绘制(p1在下面的代码中)以获得: 在此输入图像描述

我还有一组具有连续响应的位置,我也可以绘制(p2在下面的代码中)以获得: 在此输入图像描述 但是我无法将两者结合起来(p3在下面的代码中).我收到这个错误

比例误差[[prev_aes]]:尝试选择少于一个元素

注释掉该行scale_colour_hue("Strahler order") +会将错误更改为

错误:提供给连续刻度的离散值

基本上似乎ggplot2对geom_path呼叫和geom_point呼叫使用相同的比例类型(连续或离散).因此,当我将离散变量传递 factor(Strahler)scale_colour_gradientn比例时,绘图失败.

有没有解决的办法?如果有data一个scale函数的参数告诉它应该映射或设置属性,那将是惊人的.这甚至可能吗?

非常感谢和可重现的代码如下:

library(ggplot2)

### Download df's   ###
oldwd <- getwd(); tmp <- tempdir(); setwd(tmp)
url <- "http://dl.dropbox.com/u/44829974/Data.zip"
f <- paste(tmp,"\\tmp.zip",sep="")
download.file(url,f)
unzip(f)


### Read in data    ###
riv_df <- read.table("riv_df.csv", sep=",",h=T)
afr_df <- read.table("afr_df.csv", sep=",",h=T)
vil_df <- read.table("vil_df.csv", sep=",",h=T)


### Min and max for plot area   ###
xmin …
Run Code Online (Sandbox Code Playgroud)

gis graphics r ggplot2

10
推荐指数
2
解决办法
9234
查看次数