为什么R返回整数而不是字符串

为什么R返回整数而不是字符串,r,R,我正在尝试编写一个R函数,它将生成一个字符串供以后输出。数据位于一个数据框中,其中有一个列和行名 fcc <- structure(list(temp = structure(c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 3L, 3L, 3L, 4L, 3L, 3L, 3L, 3L, 3L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 3L, 4L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,

我正在尝试编写一个R函数,它将生成一个字符串供以后输出。数据位于一个数据框中,其中有一个列和行名

fcc <- structure(list(temp = structure(c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 1L, 3L, 3L, 3L, 4L, 3L, 3L, 3L, 3L, 3L, 2L, 3L, 3L, 3L, 
3L, 3L, 3L, 4L, 3L, 4L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
4L, 4L, 1L, 3L, 3L, 4L, 4L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L
), .Label = c("H", "M", "N", "S"), class = "factor")), 
.Names = "temp", row.names = 
  c(NA, 135L), class = c("tbl_df", "tbl", "data.frame"))

outStr <- "name"
for(i in 1:nrow(fcc)){
 if (fcc[i,] != "N"){
   outStr <- paste0(outStr," ", rownames(fcc)[i],"(",fcc[i,],")") 
 }
}
我很确定这是我的误解,但我不明白

谢谢!
Matt

实际上,您的对象不是“常规”data.frame。这是一个
tbl_df
可能是由
dplyr
创建的。看起来这个类有不同的子集规则。对于normal data.frames,当您选择子集并且只返回一列时,结果将转换为向量

tbl_df
对象和标准
data.frame

fcc2 <- as.data.frame(fcc)
str(fcc[1,])
# Classes ‘tbl_df’ and 'data.frame':    1 obs. of  1 variable:
#  $ temp: Factor w/ 4 levels "H","M","N","S": 3
str(fcc2[1,])
# Factor w/ 4 levels "H","M","N","S": 3
str(fcc2[1,, drop=F])
# 'data.frame': 1 obs. of  1 variable:
#  $ temp: Factor w/ 4 levels "H","M","N","S": 3
另外请注意,您的外观实际上是不必要的,您可以在矢量化操作中对所有内容进行索引/子集/折叠

paste(paste0(seq_along(fcc[[1]]), "(", fcc[[1]] , ")")[fcc[[1]]!="N"], collapse=" ")

这里我们使用
[[]]
tbl_df
对象中提取因子向量,因此粘贴效果更好。

实际上,您的对象不是“常规”数据帧。这是一个
tbl_df
可能是由
dplyr
创建的。看起来这个类有不同的子集规则。对于normal data.frames,当您选择子集并且只返回一列时,结果将转换为向量

tbl_df
对象和标准
data.frame

fcc2 <- as.data.frame(fcc)
str(fcc[1,])
# Classes ‘tbl_df’ and 'data.frame':    1 obs. of  1 variable:
#  $ temp: Factor w/ 4 levels "H","M","N","S": 3
str(fcc2[1,])
# Factor w/ 4 levels "H","M","N","S": 3
str(fcc2[1,, drop=F])
# 'data.frame': 1 obs. of  1 variable:
#  $ temp: Factor w/ 4 levels "H","M","N","S": 3
另外请注意,您的外观实际上是不必要的,您可以在矢量化操作中对所有内容进行索引/子集/折叠

paste(paste0(seq_along(fcc[[1]]), "(", fcc[[1]] , ")")[fcc[[1]]!="N"], collapse=" ")
这里我们使用
[[]]
tbl_df
对象中提取因子向量,因此粘贴效果更好