我想在plyr包中声明**ply函数中的row/col输出名称ldply.
例如,
我有一个列表,foo我想转换为a data.frame并截断有效数字signif()
foo <- list(var.a = runif(3), var.b = runif(3), var.c=runif(3))
Run Code Online (Sandbox Code Playgroud)
我现在拥有的是什么
q <- ldply(foo, signif, 2)
colnames(dq)[1] <- c('id', 'q1', 'q2','q3')
rownames(dq) <- dq$id
Run Code Online (Sandbox Code Playgroud)
有没有更简单的方法?
前两个问题都问如何使用plyr重命名行和COLS使用plyr,但我想我的问题是不同的.名称可以与另一个功能同时声明(或者如果我正确地这样做)?这是一个有价值的功能要求吗?
我有一个函数dbquery,简化了从R内部查询MySQL数据库的过程.
dbquery <- function(querystring) {
dvr <- dbDriver("MySQL")
con <- dbConnect(dvr, group = "databasename")
q <- dbSendQuery(con, querystring)
data <- fetch(q, n = -1)
return(data)
}
Run Code Online (Sandbox Code Playgroud)
因此我可以发送:
dbquery(querystring = "select field_1, field_2, field_3
from table_a join table_b on this = that
join table_c on that = something
where field_4 in (1,2,3);"
Run Code Online (Sandbox Code Playgroud)
但是,变量querystring必须包含在引号内.这使得Emacs ESS不会像在SQL模式下那样很好地缩进我的查询 - 或者甚至像没有引号但只是在ESS-R模式下那样.
是否有可能让ESS这样做?也许通过编写函数使它接受没有引号的查询(并在函数中添加引号),或者可能在.emacs或ess.el中添加一些东西?

这是我用来重新创建此示例的代码:
library(nlme)
spatDat <- data.frame(x = c(0,0.25,0.5,0.75,1), y = c(0,0.25,0.5,0.50,0.75))
cs1Exp <- corExp(1, form = ~x+y)
cs1Exp <- initialize(cs1Exp, spatDat)
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时,我收到此错误:
Error in getClass(Class) :
c("\"corExp\" is not a defined class", "\"corSpatial\" is not a defined class", "\"corStruct\" is not a defined class")
In addition: Warning message:
In if (!is.na(match(Class, .BasicClasses))) return(newBasic(Class, :
the condition has length > 1 and only the first element will be used
Run Code Online (Sandbox Code Playgroud)
为什么我会收到此错误?
附录
R version 2.13.0 (2011-04-13) …Run Code Online (Sandbox Code Playgroud) 我在emacs中进行大部分开发,并使用bzr进行版本控制.我推断这c-x v =相当于bzr diff,但我不清楚如何从emacs中提交,或者各种bzr命令如何映射到emacs键绑定.任何人都可以建议最好的方法或指向我的教程吗?
当我尝试在我的.Rbuildignore文件中构建包含以下内容的包时,
*pdf
*Rdata
Run Code Online (Sandbox Code Playgroud)
我得到错误:
readLines(ignore_file)中的警告:在'/home/user/project/.Rbuildignore'上找到不完整的最后一行
和
无效的正则表达式'*pdf'
我以为'*'是一个或多个角色的通配符?
当我从数字向量创建数据框时,R似乎截断了我在分析中所需的精度以下的值:
data.frame(x=0.99999996)
Run Code Online (Sandbox Code Playgroud)
返回1(*但请参阅更新1)
我在拟合时卡住了,spline(x,y)并且当y变化时,由于四舍五入,两个x值被设置为1.我可以解决这个问题,但我更愿意使用标准解决方案(如果有的话).
例
这是一个示例数据集
d <- data.frame(x = c(0.668732936336141, 0.95351462456867,
0.994620622127435, 0.999602102672081, 0.999987126195509, 0.999999955814133,
0.999999999999966), y = c(38.3026509783688, 11.5895099585560,
10.0443344234229, 9.86152339768516, 9.84461434575695, 9.81648333804257,
9.83306725758297))
Run Code Online (Sandbox Code Playgroud)
以下解决方案有效,但我更喜欢不太主观的东西:
plot(d$x, d$y, ylim=c(0,50))
lines(spline(d$x, d$y),col='grey') #bad fit
lines(spline(d[-c(4:6),]$x, d[-c(4:6),]$y),col='red') #reasonable fit
Run Code Online (Sandbox Code Playgroud)
更新1
*自发布此问题以来,我意识到1即使数据框仍包含原始值,这将返回,例如
> dput(data.frame(x=0.99999999996))
Run Code Online (Sandbox Code Playgroud)
回报
structure(list(x = 0.99999999996), .Names = "x", row.names = c(NA,
-1L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)
更新2
在使用dput发布这个示例数据集和Dirk的一些指针之后,我可以看到问题不在于截断x值,而在于我用来计算的模型中的数值误差的限制y.这证明了丢弃一些等效数据点(如示例红线所示).
当我查找带有错误消息的日志文件时grep error *log,它会返回一个日志文件列表
$grep error *log
Binary file out0080-2011.01.07-12.38.log matches
Binary file out0081-2011.01.07-12.38.log matches
Binary file out0082-2011.01.07-12.38.log matches
Binary file out0083-2011.01.07-12.38.log matches
Run Code Online (Sandbox Code Playgroud)
但是,这些是文本,而不是二进制文件.
我不确定为什么这些被认为是二进制,前几行包含以下非错误消息:
out0134
-catch_rsh /opt/gridengine/default/spool/compute-0-17/active_jobs/327708.1/pe_hostfile
compute-0-17
Run Code Online (Sandbox Code Playgroud)
我想grep 返回文件的内容以获取错误消息,并返回带有消息的文件的名称.
我如何grep返回的文件的内容,而不是这个返回的文件列表,如grep error *log | grep foo?
在回答上一个问题时:
我怎样才能使用'我有root权限吗?' 作为bash的条件?
建议"尝试做某事并检测是否失败"而不是"检查权限然后做某事"
我发现了很多理由,例如:
但是,我发现很少有关于如何在bash中实现try/catch的明确信息.我猜它太容易了,除了我发现的东西看起来相当复杂 - 使用函数或其他脚本:
我对bash相对比较新,但我觉得没有类似于try其他语言中的函数的简单函数.
具体来说,我想做以下事情:
CMD=`./path/to/script.sh`
if [ <echo $CMD | grep error is true> ]; then
.. do this ..
else
.. do that ..
fi
Run Code Online (Sandbox Code Playgroud) jags.model期望包含BUGS模型的文件名作为其第一个参数.为了在一个脚本中包含所有内容,我有时会使用该writeLines命令将BUGS模型写入文件.例如,
library(rjags)
writeLines("
model {
for (i in 1:length(Y1)) {
Y1[i] ~ dnorm(Beta0, Beta1)
}
Beta0 ~ dunif(1, 5)
Beta1 ~ dunif(0, 10000)
}
"
, "m1.jags")
mod1 <- jags.model("m1.jags", data=Data)
Run Code Online (Sandbox Code Playgroud)
但是,如果我有我的选择,我真的不希望创建该文件.
有没有办法在R中创建包含文本的某种虚拟文件?
我想可能有某种方法使用R连接以某种方式将字符串写入变量以模仿文件的功能.
我正在思考的粗略伪代码:
m1.jags <- "model {
...
}
"
jags.model(SomeRCommand(m1.jags), data=Data)
Run Code Online (Sandbox Code Playgroud) 我正在为导入xml文件的R函数编写测试settings.xml.
目前,当我为依赖于内容的函数编写测试时foo.xml,包括read.settings以下示例中的函数:
writeLines("<fee><fi><\fi>\fee>", con = "/tmp/foo.xml")
settings <- read.settings("/tmp/foo.xml")
file.remove("/tmp/foo.xml")
Run Code Online (Sandbox Code Playgroud)
但是,出现了许多与使测试系统无关的问题.例如,在测试目录/tmp/中read.settings()留下孤立文件等可能无法写入或出错.这是一个简单的例子,我可以想办法解决这些问题,但我记得在回答上一个问题时有这样的解决方案,我现在找不到,其中con不是文件而是内存中的对象.我确信在很多情况下,不实际编写文件是有用的.
?connections似乎是一个很好的领导,但我不清楚如何使用提供的信息跟进(但不要太开放)