R中矩阵嵌套索引在控制台可行但终端报错的原因咨询
问题原因解释
核心错误点
你在cv.glmnet里写的x[train, ]是完全错误的用法:train是x的子集矩阵,并非行索引向量。R在处理矩阵作为行下标时,会把矩阵按列优先展平成一个数值向量,然后用这个向量里的数值去索引x的行——这根本不是你想要的“取训练集行”的操作。
为什么RStudio和终端表现不同?
这完全是随机抽样的偶然性导致的:
- R的行索引规则明确:负数下标代表排除对应行,正数代表选择对应行,但这两种类型不能混合使用(仅允许0和负数的组合)。
- 你用
sample生成的trainIndex是随机的,每次运行得到的train矩阵内容都不一样:- RStudio那次运行时,
train展平后的向量里要么全是非负数(没有触发混合下标的冲突),要么只有负数和0(符合R的下标规则),所以没报错。 - 终端运行那次,
train展平后的向量里同时存在正数和非0的负数,直接违反了R的下标规则,因此抛出错误。
- RStudio那次运行时,
正确写法
你完全不需要用x[train, ],直接用train即可(因为它本身就是x的训练集行子集),或者用x[trainIndex, ],两种写法都能正确指向训练集:
Model = cv.glmnet(train, y[trainIndex], alpha = 1, lambda = grid, family = "binomial", nfolds = 12) # 或者 Model = cv.glmnet(x[trainIndex, ], y[trainIndex], alpha = 1, lambda = grid, family = "binomial", nfolds = 12)
内容的提问来源于stack exchange,提问作者Rachel Chung
相关产品推荐
相关产品推荐

