2015-03-30 49 views

回答

4

不在write.csvwrite.table本身。从帮助文档(?write.table):

在几乎所有情况下的数字量转换为 通过“‘scipen’”(见“选项”)选项管辖,但与“位数 内部等效= 15'。为了更好地控制,使用 “格式”来制作字符矩阵/数据帧,并在其上调用 'write.table'。

,你是什么更好做是格式化自己使用format列(S),ALA:

set.seed(42) 
df1 <- data.frame(x = runif(10), y = sample(10)) 
df1$x <- round(df1$x, digits = 2) 
write.csv(df1, ...) 

编辑

对于漂亮的打印屏幕,只需使用options(digits = 2)并再次转储data.frame。我猜你想漂亮地打印到CSV,所以......

使用以下功能:

dfDigits <- function(x, digits = 2) { 
    ## x is a data.frame 
    for (col in colnames(x)[sapply(x, class) == 'numeric']) 
     x[,col] <- round(x[,col], digits = digits) 
    x 
} 
set.seed(42) 
df1 <- data.frame(x=runif(5),y=sample(5)) 
head(df1) 
##    x y 
## 1 0.9148060435 3 
## 2 0.9370754133 5 
## 3 0.2861395348 1 
## 4 0.8304476261 2 
## 5 0.6417455189 4 
head(dfDigits(df1, 2)) 
##  x y 
## 1 0.91 3 
## 2 0.94 5 
## 3 0.29 1 
## 4 0.83 2 
## 5 0.64 4 
+0

感谢。是的,我知道这个选择。我应该更加明确 - 随着算法开发的进展,我为DF增加了新的列,并且对每个数字列使用明确的“数字”变得有点麻烦。希望那里只是一个DF的子程序,它可以将所有数字列转换为所需的精度(或格式)并保持其他类型的完整。 – 2015-03-30 17:58:35

+0

你希望它隐含在'data.frame'中吗?这与你所问的完全不同(关于'write.csv')。所以,你问的是一个函数,它将* data.frame中的所有*数字列转换为特定的数字位数? – r2evans 2015-03-30 18:02:22

+0

只写出“眼睛悦目”。不适用于操作。 – 2015-03-30 18:04:16