【问题标题】:R, sink/cat: Output something else than numbers?R, sink/cat:输出数字以外的东西?
【发布时间】:2014-07-08 14:31:07
【问题描述】:

我对 R 比较陌生,我猜我的代码中不止一件事是不充分的做法(例如,使用 for 循环)。我认为在这个例子中,可以用 apply-family 中的东西更好地解决它,但我不知道如何在我原来的问题中做到这一点 - 所以,如果可能,请让 for 循环成为 for 循环.如果有其他不好的地方,我很高兴听到您的意见。

但我真正的问题是这个。我有:

name <- c("a", "a", "a", "a", "a", "a","a", "a", "a", "b", "b", "b","b", "b", "b","b", "b", "b") 
class <- c("c1", "c1", "c1", "c2", "c2", "c2", "c3", "c3", "c3","c1", "c1", "c1", "c2", "c2", "c2", "c3", "c3", "c3")
value <- c(100, 33, 80, 90, 80, 100, 100, 90, 80, 90, 80, 100, 100, 90, 80, 99, 80, 100)
df <- data.frame(name, class, value)
df

我想把它打印出来。稍后我使用 sink 和 hwriter(将其输出为 html)。我都遇到了问题,所以我希望它是由相同的原因引起的,如果我们解决它来解决问题就足够了。代码如下:

sink("stuff.txt")

for (i in 1:nrow(df)) {
    cat(" Name:")
    cat(df$name[i-1])
    cat("\n")
    cat(" Class:")
    cat(df$class[i-1])
    cat("\n")
}

sink()
file.show("stuff.txt")

我得到的部分输出类似于:

 Name:1
 Class:1
 Name:1
 Class:2
 Name:1
 Class:2

另一方面,我想要的输出应该是:

 Name:a
 Class:c1
 Name:a
 Class:c2
 Name:a
 Class:c2

【问题讨论】:

  • 您的 data.frame 命令正在创建因素。如果您不想要它们,请使用df &lt;- data.frame(name, class, value, stringsAsFactors=F)
  • 嗯,这很容易。谢谢!

标签: r cat sink


【解决方案1】:

cat 打印数字的原因是当您将字符变量放入 data.frame 时,它​​们被转换为“因子”。这是 data.frames 的默认行为。它通常是一种更有效的存储值的方法,因为它将每个字符串值转换为唯一的整数值。这就是为什么您在计算值时会看到数字。

如果您不想在 data.frame 中使用因子,可以使用

df <- data.frame(name, class, value, stringsAsFactors=F)

这会将值保留为字符。或者,您可以在打印时转换为字符

cat(as.character(df$name[i-1]))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多