只获取数据框中的NA?

时间:2016-12-14 20:18:25

标签: r

我正在尝试创建一个包含两列和10行的数据帧,其中第一列包含权重(在代码中用w表示),第二列包含错误率(由cv.error表示)。但是我得到一个只包含NA的数据帧。我不知道自己做错了什么。帮助将不胜感激。

我想要一个数据帧,其中第一列有" w"另一个有cv.error。

以下是我的代码

l <- data.frame(matrix(NA, nrow = 10, ncol = 2))

k_fun <- function(combined_distance,n,j)
{
   glm_fit <- glm(gcms$train$response ~ combined_distance ,family=binomial, data=gcms$train,control = list(maxit = 50))
   cv.error = cv.glm(gcms$train, glm_fit,K=5)$delta[1]
   l[j,1] = n
   l[j,2] = cv.error
}

w = c(0.1,0.2,0.25,0.3,0.35,0.4,0.45,0.50,0.7,0.9)

for(j in 1:10)
{
   combined_distance <- alkoloiddistance + (1 - alkoloiddistance^w[j]) *   solventdistance
   k_fun(combined_distance,w[j],j)
}

2 个答案:

答案 0 :(得分:1)

不知道为什么我的答案被删除了。它回答了这个问题,并解释了原因。

你需要l[j,1] <<- nl[j,2] <<- cv.error。你希望在函数内更新l,但实际上它只是更新函数中的本地副本。所以在运行循环后,你的r会话中的l完全没有变化。你设置l作为NA的数据帧,因此你仍然得到一个包含所有NA的数据帧。

答案 1 :(得分:0)

问题可能与您实例化数据框的方式有关。如果在运行代码的第一行后运行str(l),您可能会看到R分配的数据类型是逻辑或因子。如果您尝试为这些类型的列分配数值,则会获得NA。尝试在其余代码之前运行options(stringsAsFactors = F)。或者,您可以在代码的第一行中指定所需的NA类(例如NA_integer_)。