В кадре данных:Запись в файл и присвоение имени связанному вектору в R
Вопрос
У меня есть данные, которые выглядят так этот.И мой код ниже просто вычислите некоторое значение и привязывает выходной вектор с исходными рамами данных.
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);
У меня есть пара вопросов по поводу вышеизложенного:
Но почему приведенная выше функция write() выдает эту ошибку.Есть ли способ это исправить?
Ошибка в cat(list(...), file, sep, fill, labels, add):Аргумент 1 (тип «список») не может быть обработан по вызовам «кошка»:write -> Chece Chiscution остановилась
Названия для Bend Vector в кадре данных добавляются как «Errprob» для всех 10 новых столбцов.Есть ли способ назвать их «errprob1», «errprob2» и т. д.?
Решение
Во-первых, точки с запятой не нужны, 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)
Я полагаю, что вы ищете функцию write.table.
Используйте функцию colnames
Другие советы
Вы можете использовать write.table() вместо write() для использования с аргументами, указанными выше.Последний подходит для печати матриц (но может потребовать указания ncol или транспонирования входной матрицы), но первый более общий, и я использую его как для матриц, так и для кадров данных.
Вы можете заменить
err_prob <- pnorm(dat$V4,mean=meanl, sd=stdevl)
список проблем <- cbind(список проблем,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)
апостериори