如何在R中将纯文本文件作为单个字符串导入?我认为这可能会有一个非常简单的答案,但是当我今天尝试这个时,我发现我找不到这样做的功能.
例如,假设我有一个文件,foo.txt
其中包含我想要的文本.
我尝试过:
scan("foo.txt", what="character", sep=NULL)
Run Code Online (Sandbox Code Playgroud)
但这仍然返回了一个向量.我得到了一些工作:
paste(scan("foo.txt", what="character", sep=" "),collapse=" ")
Run Code Online (Sandbox Code Playgroud)
但这是一个非常丑陋的解决方案,也可能不稳定.
我试图制作密度值的直方图,并用密度函数的曲线(而不是密度估计值)覆盖它.
使用简单的标准正常示例,这里有一些数据:
x <- rnorm(1000)
Run Code Online (Sandbox Code Playgroud)
我可以:
q <- qplot( x, geom="histogram")
q + stat_function( fun = dnorm )
Run Code Online (Sandbox Code Playgroud)
但这给出了直方图在频率而不是密度上的比例.与..density..
我能得到直方图的适度规模:
q <- qplot( x,..density.., geom="histogram")
q
Run Code Online (Sandbox Code Playgroud)
但现在这给出了一个错误:
q + stat_function( fun = dnorm )
Run Code Online (Sandbox Code Playgroud)
有没有我没看到的东西?
另一个问题是,有没有办法绘制一个函数的曲线,比如curve()
,然后不作为图层?
我注意到在检查一个包时,我获得了"全局变量没有可见绑定"的注释,当我使用类似函数时subset
,使用列表元素的逐字名称作为参数.
例如,使用数据框:
foo < - data.frame(a = c(TRUE,FALSE,TRUE),b = 1:3)
我可以做愚蠢的事情,比如:
subset(foo,a)
transform(foo,a=b)
Run Code Online (Sandbox Code Playgroud)
哪个工作如预期.然而,R CMD中的R代码检查不理解这些引用元素并且抱怨没有任何可见的全局变量绑定.
虽然这个工作正常,但我真的不喜欢在我的包中加注,并且更喜欢它通过检查而没有任何错误,警告和注释.我也不想过多地修改我的代码.有没有办法编写这些代码,以便明确参数不引用全局变量?
我意识到这个问题可能没有一个最好的答案,并且它可能会被关闭,但我认为这可能会得到一些非常有用的答案,所以也许它可以变成CW.
假设您必须提供R课程以完成初学者,并且您只有有限的时间这样做,因此您需要在所强调的内容中做出选择.这是伟大的,年轻无辜的思想屈服于我们的意志!但是我们怎么做呢?
我们如何才能为绝对的初学者最好地设置R课程,以便他们成为R的有效用户.我们希望他们做正确和有效的一切,但当然我们希望他们能够做到更好的事情.我想到的一些问题是:
我想创建一个函数,根据某人系统上可用的RAM数量,导入不同批次的数据.但是如何在R中找到可用RAM的数量?我可以使用memory.size()
但只适用于Windows.
简短的问题,如果我有一个字符串,我该如何测试该字符串是否是一个有效的颜色表示R
?
我尝试了两件事,首先使用函数col2rgb()
来测试它是否是一种颜色:
isColor <- function(x)
{
res <- try(col2rgb(x),silent=TRUE)
return(!"try-error"%in%class(res))
}
> isColor("white")
[1] TRUE
> isColor("#000000")
[1] TRUE
> isColor("foo")
[1] FALSE
Run Code Online (Sandbox Code Playgroud)
工作,但看起来不是很漂亮,也没有矢量化.第二件事是检查字符串是否在colors()
向量中,或者#
后跟一个长度为4到6的十六进制数:
isColor2 <- function(x)
{
return(x%in%colors() | grepl("^#(\\d|[a-f]){6,8}$",x,ignore.case=TRUE))
}
> isColor2("white")
[1] TRUE
> isColor2("#000000")
[1] TRUE
> isColor2("foo")
[1] FALSE
Run Code Online (Sandbox Code Playgroud)
哪个有效但我不确定它有多稳定.但似乎应该有一个内置函数来进行此检查?
我正在寻找一种方法来测试R是否从RStudio运行.出于某种原因,我可以在谷歌昨天找到答案但不是今天,但我认为这与测试是否设置了某个系统变量有关.
我有一堆名字,我想获得独特的名字.但是,由于拼写错误和数据不一致,名称可能写错了.我正在寻找一种方法来检查字符串向量,如果其中两个是similair.
例如:
pres <- c(" Obama, B.","Bush, G.W.","Obama, B.H.","Clinton, W.J.")
Run Code Online (Sandbox Code Playgroud)
我想找到它" Obama, B."
并且"Obama, B.H."
非常相似.有没有办法做到这一点?
我经常需要将函数应用于数据框/矩阵中的每对列,并以矩阵形式返回结果.现在我总是写一个循环来做这件事.例如,要创建一个包含相关p值的矩阵,我写道:
df <- data.frame(x=rnorm(100),y=rnorm(100),z=rnorm(100))
n <- ncol(df)
foo <- matrix(0,n,n)
for ( i in 1:n)
{
for (j in i:n)
{
foo[i,j] <- cor.test(df[,i],df[,j])$p.value
}
}
foo[lower.tri(foo)] <- t(foo)[lower.tri(foo)]
foo
[,1] [,2] [,3]
[1,] 0.0000000 0.7215071 0.5651266
[2,] 0.7215071 0.0000000 0.9019746
[3,] 0.5651266 0.9019746 0.0000000
Run Code Online (Sandbox Code Playgroud)
哪个有效,但对于非常大的矩阵来说非常慢.我可以在R中为此编写一个函数(通过假设如上所述的对称结果,不会因为切割时间减半而烦恼):
Papply <- function(x,fun)
{
n <- ncol(x)
foo <- matrix(0,n,n)
for ( i in 1:n)
{
for (j in 1:n)
{
foo[i,j] <- fun(x[,i],x[,j])
}
}
return(foo)
}
Run Code Online (Sandbox Code Playgroud)
或者是Rcpp的函数:
library("Rcpp")
library("inline")
src <-
' …
Run Code Online (Sandbox Code Playgroud)