我对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
答案 0 :(得分:1)
cat
打印数字的原因是,当您将它们放入data.frame时,您的角色变量会转换为“因子”。这是data.frames的默认行为。它通常是一种更有效的存储值的方法,因为它将每个字符串值转换为唯一的整数值。这就是你捕捉价值时看到数字的原因。
如果您不想在data.frame中使用因子,可以使用
df <- data.frame(name, class, value, stringsAsFactors=F)
这会将值保留为字符。或者,您可以在打印时转换为字符
cat(as.character(df$name[i-1]))