【发布时间】:2015-01-27 09:27:09
【问题描述】:
尝试在 R 脚本中计算 100x2 矩阵的 SVD 时,我收到了 Error in svd(x, nu = 0L, nv = 0L) : infinite or missing values in 'x'。有趣的是,在 R 提示符中对完全相同的矩阵执行完全相同的操作非常有效。
这些是数据:
[,1] [,2]
[1,] 5840 5
[2,] 5840 6
[3,] 14600 2
[4,] 5840 5
[5,] 5840 4
[6,] 5840 5
[7,] 14600 5
[8,] 14600 8
[9,] 5840 5
[10,] 262144 11
[11,] 66240 5
[12,] 16560 14
[13,] 5840 5
[14,] 5840 17
[15,] 16560 6
[16,] 5840 7
[17,] 66240 5
[18,] 5840 7
[19,] 33003 7
[20,] 65535 7
[21,] 5840 6
[22,] 65535 7
[23,] 65535 4
[24,] 16560 4
[25,] 5840 4
[26,] 14600 9
[27,] 65535 6
[28,] 14600 8
[29,] 8192 8
[30,] 14600 5
[31,] 14600 5
[32,] 131072 8
[33,] 14600 10
[34,] 14600 5
[35,] 14600 5
[36,] 14600 5
[37,] 14600 5
[38,] 14600 8
[39,] 8192 9
[40,] 8192 16
[41,] 65535 5
[42,] 14600 5
[43,] 6432 5
[44,] 14600 5
[45,] 5840 5
[46,] 14600 5
[47,] 8192 7
[48,] 254992 5
[49,] 14600 6
[50,] 5840 7
[51,] 14600 5
[52,] 5840 6
[53,] 16560 7
[54,] 64860 6
[55,] 14600 5
[56,] 14600 5
[57,] 14600 5
[58,] 14600 5
[59,] 14600 5
[60,] 14600 5
[61,] 5840 5
[62,] 65535 4
[63,] 14600 5
[64,] 14600 5
[65,] 14600 8
[66,] 131328 5
[67,] 5840 5
[68,] 14600 5
[69,] 14600 5
[70,] 14600 5
[71,] 14600 5
[72,] 14600 5
[73,] 14600 5
[74,] 5840 19
[75,] 14600 5
[76,] 5840 5
[77,] 14600 5
[78,] 14600 5
[79,] 14600 5
[80,] 14600 5
[81,] 14600 5
[82,] 14600 5
[83,] 5840 7
[84,] 14600 5
[85,] 66048 21
[86,] 65535 159
[87,] 6432 6
[88,] 14600 5
[89,] 65535 5
[90,] 8192 10
[91,] 5840 5
[92,] 14600 5
[93,] 14600 5
[94,] 66048 8
[95,] 14600 5
[96,] 16560 5
[97,] 14600 5
[98,] 42900 6
[99,] 8192 7
[100,] 8192 7
我使用的是列的一个子集,所以我实际调用的是svd(C[,1:i]),其中C 是我正在使用的矩阵,i 在崩溃时等于 2。
我很肯定脚本中的矩阵和提示中的矩阵是相同的(我将它们都打印到不同的文件中并进行了区分以确保!)
那么,这里有什么问题呢?
编辑
dput(C[,1:i])
structure(c(5840, 5840, 14600, 5840, 5840, 5840, 14600, 14600,
5840, 262144, 66240, 16560, 5840, 5840, 16560, 5840, 66240, 5840,
33003, 65535, 5840, 65535, 65535, 16560, 5840, 14600, 65535,
14600, 8192, 14600, 14600, 131072, 14600, 14600, 14600, 14600,
14600, 14600, 8192, 8192, 65535, 14600, 6432, 14600, 5840, 14600,
8192, 254992, 14600, 5840, 14600, 5840, 16560, 64860, 14600,
14600, 14600, 14600, 14600, 14600, 5840, 65535, 14600, 14600,
14600, 131328, 5840, 14600, 14600, 14600, 14600, 14600, 14600,
5840, 14600, 5840, 14600, 14600, 14600, 14600, 14600, 14600,
5840, 14600, 66048, 65535, 6432, 14600, 65535, 8192, 5840, 14600,
14600, 66048, 14600, 16560, 14600, 42900, 8192, 8192, 5, 6, 2,
5, 4, 5, 5, 8, 5, 11, 5, 14, 5, 17, 6, 7, 5, 7, 7, 7, 6, 7, 4,
4, 4, 9, 6, 8, 8, 5, 5, 8, 10, 5, 5, 5, 5, 8, 9, 16, 5, 5, 5,
5, 5, 5, 7, 5, 6, 7, 5, 6, 7, 6, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5,
8, 5, 5, 5, 5, 5, 5, 5, 5, 19, 5, 5, 5, 5, 5, 5, 5, 5, 7, 5,
21, 159, 6, 5, 5, 10, 5, 5, 5, 8, 5, 5, 5, 6, 7, 7), .Dim = c(100L,
2L))
【问题讨论】:
-
你能在你的 svd 调用之前添加
print(C[,1:i]),看看哪个输入产生了错误吗? -
这就是我发布的内容,
print(C[,1:i])。 -
发布
dput(C[,1:i])的输出。 -
就是这样。抱歉耽搁了。我不得不
scp工作文件。 -
将
dput的结果赋值给对象x。然后svd(x, nu = 0L, nv = 0L)和svd(x[,1:2], nu = 0L, nv = 0L)在Rscript中完美运行并给出相同的结果。所以我会说,要么你在交互式 R 和 Rscript 中做的事情不同