为什么R返回整数而不是字符串
我正在尝试编写一个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,
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
对象中提取因子向量,因此粘贴效果更好