我试图实例化一个数据框,然后在其中插入行。其中一列将包含字符串。我将字符串视为因素存在问题,然后当出现新字符串时,R会插入NA
。所以我不得不使用以下解决方法:
df = data.frame(x = character(3), stringsAsFactors = F)
df = rbind(df, c('foo'))
df = rbind(df, c('bar'))
df
# x
#1
#2
#3
#4 foo
#5 bar
然而,它并不好,因为我不想要空行。但是以下方法不起作用:
df = data.frame(x = character(0), stringsAsFactors = F)
df = rbind(df, c('foo'))
df = rbind(df, c('bar'))
#Warning message:
#In `[<-.factor`(`*tmp*`, ri, value = "bar") :
# invalid factor level, NA generated
我知道我可以使用df[i, ] = c(...)
,但我不想跟踪索引。
答案 0 :(得分:3)
使用list
:
rbind(df, list(x=c("foo","bar")))
# x
#1 foo
#2 bar
答案 1 :(得分:2)
rbind
为stringsAsFactors=TRUE
。因此,请使用stringsAsFactors=FALSE
以避免转换为factor
类
根据?rbind
rbind(...,deparse.level = 1,make.row.names = TRUE, stringsAsFactors = default.stringsAsFactors())
df <- rbind(df, list(x='foo'), stringsAsFactors= FALSE)
df <- rbind(df, list(x = 'bar'), stringsAsFactors = FALSE)
df
# x
#1 foo
#2 bar
str(df)
#'data.frame': 2 obs. of 1 variable:
# $ x: chr "foo" "bar"
我们也可以在stringsAsFactors
中更改options
,而不是重复使用data.frame
。
这里我们假设OP想要按顺序添加行,并根据OP character
('df')的初始化,列类将是def reconstruct_path(came_from, start, goal):
current = goal
path = [current]
while current != start:
current = came_from[current]
path.append(current)
path.reverse() # optional
return path
class
答案 2 :(得分:1)
确保使用rbind
加入具有相同列名的data.frames
df = data.frame(x = character(0), stringsAsFactors = FALSE)
df = rbind(df, data.frame(x = c('foo')))
df = rbind(df, data.frame(x = c('bar')))
df
# x
#1 foo
#2 bar
答案 3 :(得分:0)
采用func ImageFromUrl(imageView:UIImageView,url:String,type:String) {
if url.isEmpty {
imageView.image = #imageLiteral(resourceName: "defaultIcon")
print("Url is empty.")
return
}
var documentsDirectoryURL:URL
if type == "user" {
documentsDirectoryURL = try! FileManager().url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true).appendingPathComponent("Image/User/")
let exist = FileManager.default.fileExists(atPath: documentsDirectoryURL.path)
if !exist {
do {
try FileManager.default.createDirectory(atPath: documentsDirectoryURL.path, withIntermediateDirectories: true, attributes: nil)
} catch let error as NSError {
debug(object: error)
}
}
}
// create a name for your image
let fileName = url.md5()
let fileURL = documentsDirectoryURL.appendingPathComponent(fileName)
let urlString = URL(string: url)
if let image = UIImage(contentsOfFile: fileURL.path) {
imageView.image = image
return
}
DispatchQueue.global().async {
let data = try? Data(contentsOf: urlString!) //make sure your image in this url does exist, otherwise unwrap in a if let check / try-catch
if data != nil
{
if let image = UIImage(data: data!)
{
if !FileManager.default.fileExists(atPath: fileURL.path) {
var c = [UInt32](repeating: 0, count: 1)
(data! as NSData).getBytes(&c, length: 1)
switch (c[0]) {
case 0xFF:
print("Download jpg: \(url)")
if let jpegData = UIImageJPEGRepresentation(image, 0.5) {
do {
try jpegData.write(to: fileURL, options: .atomic)
} catch {
debug(object: error)
}
}
case 0x89:
print("Download png: \(url)")
if let pngData = UIImagePNGRepresentation(image) {
do {
try pngData.write(to: fileURL, options: .atomic)
} catch {
debug(object: error)
}
}
case 0x47:
print("Download gif: \(url)")
default:
print("Download unknown: \(c[0])\(url)")
}
} else {
// debug(object:"file already exists")
}
DispatchQueue.main.async {
imageView.image = image
}
}
}
}
}
func GeneratorAvatarImageView() -> UIImageView {
let imageview = UIImageView()
imageview.layer.masksToBounds = true
imageview.layer.cornerRadius = 2
imageview.backgroundColor = UIColor.clear
imageview.contentMode = UIViewContentMode.scaleAspectFill
return imageview
}
方法
tidy