在数据帧上:在 R 中写入文件和命名绑定向量

On Data Frame: Writing to File and Naming Binded Vector in R

提问人:neversaint 提问时间:9/4/2009 最后编辑:Communityneversaint 更新时间:9/4/2009 访问量:11461

问:

我有一个看起来像这样的数据。我的代码在下面 只需计算一些值并将输出向量绑定到 原始数据框。

options(width=200)

args<-commandArgs(trailingOnly=FALSE)
dat <- read.table("http://dpaste.com/89376/plain/",fill=T);

problist <- c();

for (lmer in 1:10) {
   meanl <- lmer;
   stdevl <- (0.17*sqrt(lmer));
   err_prob <- pnorm(dat$V4,mean=meanl, sd=stdevl);
   problist <- cbind(problist,err_prob);
}

dat <- cbind(dat,problist)
#print(dat,row.names=F, column.names=F,justify=left)

# Why this breaks?
write(dat, file="output.txt", sep="\t",append=F);

关于上述内容,我有几个问题:

  1. 但是为什么上面的“write()”函数会给出这个错误。有没有办法解决它?

    cat(list(...), file, sep, fill, labels, append) 中的错误: 参数 1(类型“list”)不能由“cat”处理 调用:write -> cat 执行已暂停

  2. 数据框中绑定向量的名称将添加为所有 10 个新向量的“errprob” 列。有没有办法将它们命名为“errprob1”、“errprob2”等?

R 矢量 数据帧 写入文件

评论


答:

2赞 hatmatrix 9/4/2009 #1
  1. 您可以使用 write.table() 而不是 write() 来与上面指定的参数一起使用。后者适用于打印矩阵(但可能需要指定 ncol 或转置输入矩阵),但前者更通用,我将其用于矩阵和数据帧。

  2. 您可以替换

    err_prob <- pnorm(dat$V4,mean=meanl, sd=stdevl)

    problist <- cbind(problist,err_prob)

assign(sprintf("err_prob%d",lmer),pnorm(dat$V4,mean=meanl, sd=stdevl))
problist <- eval(parse(text=sprintf("cbind(problist,err_prob%d)", lmer)))

最后一行将字符串解析为表达式,然后对其进行计算。您也可以这样做

colnames(problist) <- sprintf("err_prob%d",1:10)

后验

4赞 Ian Fellows 9/4/2009 #2

首先,不需要分号,R 知道行的末尾是中断符。


for (lmer in 1:10){
    meanl <- lmer
    stdevl <- (0.17*sqrt(lmer))
    err_prob <- pnorm(dat$V4,mean=meanl, sd=stdevl)
    problist <- cbind(problist,err_prob)
}
colnames(problist)<-paste("errorprob",1:10,sep="")
dat <- cbind(dat,problist)
write.table(dat, file="output.txt", sep="\t",append=F)

  1. 我相信您正在寻找write.table函数

  2. 使用 colnames 函数

评论

0赞 Eduardo Leoni 9/4/2009
最好事先创建矩阵。'problist <- 矩阵(NA, ncol=10, nrow=200),然后是 problist[,lmer] <- err_prob。