【发布时间】:2015-03-01 18:36:57
【问题描述】:
可重现的例子:
adfcstable <- function(d, max = 5) {
d <- as.data.frame(d)
LevelADFtable <- matrix(, nrow = dim(d)[[2]]*3, ncol = 9) #18x9
FirstDiffADFtable <- matrix(, nrow = dim(d)[[2]]*3, ncol = 8) #18x8
Result <- matrix(, nrow = dim(d)[[2]]*3, ncol = 1) # 18x1
ADFtable <- cbind(LevelADFtable, FirstDiffADFtable, Result) # 18 x 18
colnames(ADFtable) <- c("var","type","levelt","Pc","c","Pt","t","prob","omlo","type","1stDifft","Pc","c","Pt","t","prob","omlo","result")
for (i in as.integer(1:dim(d)[[2]])) {
for (j in as.integer(1:3)) {
ADFtable[3*(i-1) + j,1] <- colnames(d)[[i]]
}
ADFtable[3*i-2,2] <- "dt"
ADFtable[3*i-2,10] <- "dt"
ADFtable[3*i-1,2] <- "d"
ADFtable[3*i-1,10] <- "d"
ADFtable[3*i,2] <- "-"
ADFtable[3*i,10] <- "-"
}
ADFtable
}
repexa <- as.data.frame(matrix(c(rnorm(10), rnorm(10), rnorm(10), rnorm(10), rnorm(10), rnorm(10)),ncol=6),stringsAsFactors = FALSE)
adfcstable(repexa)
# var type levelt Pc c Pt t prob omlo type 1stDifft Pc c Pt t prob
# [1,] "V1" "dt" NA NA NA NA NA NA NA "dt" NA NA NA NA NA NA
# [2,] "V1" "d" NA NA NA NA NA NA NA "d" NA NA NA NA NA NA
在 var 和 type 列中,引号内有值。我希望数据框中的字符串值不带引号。
我做了什么来解决这个问题:
我在 SOF 中分析过类似的问题:
assigning a string to an object without double quotes
Remove quotes from a character vector in R
R: How to remove quotation marks in a vector of strings, but maintain vector format as to call each individual value?
但是,它们在我的示例中不起作用:我在尝试这些技巧时遇到了以下错误:
1. # 在代码中,我改成了这个(但没有起作用) :
ADFtable[3*i-2,2]
2. # 在代码中,我改成了这个(但没有用):
# ADFtable[3*i-2,2]
3. # 在代码中,我改成了这个(但给出了错误): # ADFtable[3*i-2,2]
# I analyzed the error:
cat(paste0("\n", "dt", "\n")) # dt
length(cat(paste0("\n", "dt", "\n"))) # 0
# Find the reason: Assigning a 0-lengthed value to 1-lengthed one.
4. print(adfcstable(repexa), quote=FALSE) 有点作用:但它在显示数据框时将“NA”值更改为“”值。
我想要的是(将数据框显示为函数的返回值):
adfcstable(repexa)
# var type levelt Pc c Pt t prob omlo type 1stDifft Pc c Pt t prob
# [1,] V1 dt NA NA NA NA NA NA NA dt NA NA NA NA NA NA
# [2,] V1 d NA NA NA NA NA NA NA d NA NA NA NA NA NA
非常感谢任何帮助。
【问题讨论】:
-
您的函数似乎返回一个矩阵,而不是 data.frame,这可能是您看到这些引号的原因。在您的函数中导致矩阵输出的代码是
ADFtable <- cbind(LevelADFtable, FirstDiffADFtable, Result),因为您cbind有几个矩阵。如果您将其包装在as.data.frame中,它应该最终返回一个 data.frame(但未经测试)。 -
"<NA>"是print在特定类中显示一些缺失值的方式。如果您希望 R 以不同的方式表现,您将需要为它定义另一个类和一个打印方法。这些不是那些向量中的值。 -
@BondedDust,不确定您对问题标题的编辑(从 data.frame 更改为 matrix)是否代表 OP 的意图。我认为他们认为它不是一个 data.frame - 所以也许他们想知道如何正确地将它作为 data.frame 返回?
-
@BondedDust ,请重新更改标题以反映原始标题(数据框大小写)和当前标题(矩阵大小写)。 Docendo 的巧妙解决方案因这个新标题而变得模糊不清。
-
@ErdoganCEVHER:原始标题错误地描述了您创建的对象。这是一个矩阵。您可以更改代码以创建 data.frame,也可以自己更改标题。