由早期代码打高尔夫提示为什么会:
>NaN^0
[1] 1
Run Code Online (Sandbox Code Playgroud)
它非常有意义的NA^0是1,因为NA丢失数据,以及任何升至0号将为1,包括-Inf和Inf.但是NaN应该代表非数字,为什么会这样呢?当?NaN州的帮助页面时,这更令人困惑/担忧:
在R中,基本上所有数学函数(包括基本算术)都应该与+/- Inf和NaN一起作为输入或输出正常工作.
基本规则应该是呼叫和与Infs的关系确实是具有适当数学限制的陈述.
涉及NaN的计算将返回NaN或NA:这两者中的哪一个不能保证并且可能依赖于R平台(因为编译器可能重新排序计算).
这背后有一个哲学原因,还是仅仅与R代表这些常数有关?
我想知道是否有人可以向我说明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 …我一直认为你不能在零宽度断言中使用重复量词(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) 在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)
我希望两者都返回一个错误.
在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) 第一篇文章,我希望我观察网站礼仪.我无法在网站上找到并回答,我之前将其发布到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) 我有一个新的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) 注释对我的回答这个问题,这应该使用得到期望的结果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) 鉴于以下是等价的,我们可以推断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) 我想使用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)