我有以下数据框,用于调用p.inits
列中所有值的函数,并使用cols
中的相应颜色绘制它们。
p.inits = c(0.5, 0.1, 0.9)
cols = c("red", "green", "blue")
data = data.frame(cbind(p.inits, cols))
foo = function (x) { print(1:x) }
for (i in 1:nrow(data)) {
print(data$p.inits[i]
}
函数foo
表明某些东西没有按照我预期的方式工作,因为输出是:
[1] 1 2
[1] 1
[1] 1 2 3
另外,p.inits
评估为[1] 0.5 0.1 0.9
,而data$p.inits
评估为此因素:
[1] 0.5 0.1 0.9
Levels: 0.1 0.5 0.9
我的问题是:上帝的绿色地球正在发生什么?为什么列p.inits
不是数字?我只想访问值0.5, 0.1, 0.9
。
as.numeric(as.vector(data$p.inits))
可以解决问题,但这看起来非常复杂。这真的是正确的方法吗?
谢谢。
答案 0 :(得分:2)
最好只使用data.frame
调用创建data.frame
,而不是使用matrix
转换为cbind
然后转换为data.frame
。问题是matrix
如何存储元素,因为class
中通常只允许一个matrix
。这里有一个character
列,因此我们将所有元素都转换为character
。当我们转换为data.frame
时,默认选项stringsAsFactors = TRUE
会将character
类转换为factor
,这就是我们所有factor
类的原因。
data <- data.frame(p.inits, cols)
应该是
的方式如果我们不需要factor
课程
data <- data.frame(p.inits, cols, stringsAsFactors= FALSE)