【发布时间】:2015-04-22 07:08:54
【问题描述】:
我正在处理一个有 1900 列和大约 280,000 行的 data.table。
目前,数据完全是“整数”,但我希望它们明确地“数字”,以便稍后将其传递给 bigcor() 函数。显然,bigcor() 只能处理“数字”而不是“整数”。
我试过了:
full.bind <- full.bind[,sapply(full.bind, as.numeric), with=FALSE]
不幸的是,我得到了错误:
Error in `[.data.table`(full.bind, , sapply(full.bind, as.numeric), with = FALSE) :
j out of bounds
所以,我尝试使用 data.table set() 函数,但出现错误:
Error in set(full.bind, value = as.numeric(full.bind)) :
(list) object cannot be coerced to type 'double'
我创建了一个简单的可重现示例。请记住,实际的列不是“a”、“b”或“c”;它们是极其复杂的列名,因此不可能单独引用列。
dt <- data.table(a=1:10, b=1:10, c=1:10)
所以,我最后的问题是:
1) 为什么我的 sapply 技术不起作用? (什么是“j 越界”错误?) 2) 为什么 set() 技术不行? (为什么不能将 data.table 强制转换为数字?) 3) bigcor() 函数是否需要数字对象,还是有其他问题?
【问题讨论】:
-
收到答案后不删除问题。你得到了免费的帮助,所以试着感恩。
-
我实际上试图在发布后立即删除它,因为我在其他地方找到了答案。很抱歉!
-
不确定
data.frame和data.table之间的区别(所以也许这无关紧要,抱歉!),但我发现dplyr在这里很有帮助:mutate_if(df, is.integer, as.numeric)将所有整数列转换为数字:干净、简洁、快速。
标签: r data.table