2016-12-14 35 views
0

我正在试图制作一个有两列10行的数据帧,其中第一列包含权重(在代码中用w表示),第二列包含错误率(用cv.error表示)。不过,我得到一个只有NA的数据框。我不知道我做错了什么。帮助将不胜感激。在数据框中只获取NAs?

我想要一个数据帧,其中第一列有“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) 
} 
+0

@ R-Fever“你能证明什么是gcms,alkoloiddistance和solventdistance是? 你可能需要'l [j,1] << - n'和'l [j,2] << - cv.error '你希望更新函数中的数据帧,但实际上它只是其更新函数内的本地副本,所以在运行循环之后,你的r会话中的数据帧完全不变。“ –

+1

@R -Fever ...谢谢我尝试了你所说的,它的工作方式就是我想要我的代码工作的方式。 –

回答

1

不知道为什么我的答案被删除。它回答了这个问题,并解释了原因。您需要l[j,1] <<- nl[j,2] <<- cv.error。你希望在函数内部更新l,但实际上它只是其更新函数中的本地副本。所以在运行循环之后,你的r会话中的l根本不变。你设置了l作为NA的数据帧,因此你仍然得到一个全NA的数据帧。

0

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